Pages

Windows Client 檔案上傳範例

Aug 29, 2013

這個範例有 Client 與 Server 兩個專案

1. Client 傳送端:Windows Form 專案,將多個檔案與POST資料彙整後,透過 httpWebRequest 做上傳程序。

2. Server  接收端:ASP.NET 網站 ,以泛型處理常式 (.ashx) 撰寫接收檔案與參數。

 

程式碼主要是參考 stackoverflow 這篇討論: Upload files with HTTPWebrequest (multipart/form-data) 修改而來的。

 

Client 傳送端

在 Windows Client 中上傳檔案時,須要先寫入檔案的標頭資訊,再寫入檔案內容,部份程式碼如下


Stream memStream = new System.IO.MemoryStream();
...
memStream.Write(boundarybytes, 0, boundarybytes.Length);
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n";
foreach(FileInfo fi in files)
{
string header = string.Format(headerTemplate, fi.Name, fi.Name);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
memStream.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read);

byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}
memStream.Write(boundarybytes, 0, boundarybytes.Length);
fileStream.Close();
}


 



Server  接收端



在 Server 端接收處理時,上傳的檔案透過 Request.Files 取得,POST 資料透過 Request.Form 取得。



 



範例下載:請點擊   <----  開發工具為 VS2010, C# , Windows Form + ASP.NET



或者到 https://gist.github.com/robinli/6274401 複製兩段主要處理程序的程式碼。



^_^