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");
这个方法的缺点是不能断点续传,速度比较慢,所以不能上传大文件。