webform上傳文件可能大家都寫過很多,一個HtmlInputFile.PostedFile.SaveAs就搞定了,不過不知道大家有沒有在winform做過向服務器上傳文件呢?
一個很自然的想法是用Web Services,呵呵,我也很喜歡Web Services,但是后來我在網上查了一下資料,發現了另外一種比簡單實用的方法,
通過WebClient(或者HttpWebRequest)來模擬HTTP的POST動作來實現。寫出來和大家探討一下,那位大蝦寫個Web Services的方法來回應討論一下更好。
首先在服務器部署一個網站,呵呵,因為畢竟是模擬HTTP了。比如說是http://localhost:1878/UploadFileWebSite/UploadFile1.aspx。
在這個頁面的pageload里面加入下面的代碼,用來接收winform傳過來的file,保存文件在服務器。
foreach (string f in Request.Files.AllKeys) { HttpPostedFile file = Request.Files[f]; file.SaveAs(@"c:\" + file.FileName); }
至於winform那邊,就只是要調用一下WebClient的UploadFile方法了。
public bool uploadFileByHttp(string webUrl,string localFileName) { // 檢查文件是否存在 if (!System.IO.File.Exists(localFileName)) { MessageBox.Show("{0} does not exist!", localFileName); return false; } try { System.Net.WebClient myWebClient = new System.Net.WebClient(); myWebClient.UploadFile(webUrl, "POST", localFileName); } catch { return false; } return true; }
調用:
this.uploadFileByHttp("http://localhost:1878/UploadFileWebSite/UploadFile.aspx", @"D:\1.txt");
這個方法的缺點是不能斷點續傳,速度比較慢,所以不能上傳大文件。