在WinForm中通过HTTP协议向服务器端上传文件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在WinForm中通过HTTP协议向服务器端上传文件相信用写一个上传文件的网页大家都会写但是有没有人想过通过在WinForm中通过HTTP协议上传文件呢有些人说要向服务器端上传文件用FTP协议不是很简单吗效率又高为什么还要使用HTTP协议那么麻烦呢这里面有几个原因1FTP服务器的部署相对麻烦还要设置权限权限设置不对还会惹来一系列的安全问题。2如果双方都还有防火墙又不想开发FTP相关的一些端口时HTTP就会大派用场就像WEB Services能穿透防火墙一样。3其他的...还在想呢... 但是使用HTTP也有他的一些问题例如不能断点续传大文件上传很难速度很慢所以HTTP协议上传的文件大小不应该太大。说了这么多原归正传一般来说在Winform里通过HTTP 上传文件有几种可选的方法1前面提到的Web Services就是一种很好的方法通过编写一个WebMethod包含有byte 类型的参数然后调用Web Services的方法文件内容就会以Base64编码传到服务器上然后重新保存即可。WebMethod public void UploadFilebyte contentstring filename... Stream sw new StreamWriter... sw.Close 当然这种通过Base64编码的方法效率比较低那么可以采用WSE支持附件并以2进制形式传送效率会更高。2除了通过WebService另外一种更简单的方法就是通过WebClient或者HttpWebRequest来模拟HTTP的POST动作来实现。这时候首先需要编写一个
web form来响应上传代码如下ltDOCTYPE HTML PUBLIC quot-//W3C//DTD HTML 4.0 Transitional//ENquot gt lthtmlgt ltheadgt lttitlegtWebForm1lt/titlegt ltmeta namequotGENERATORquot ContentquotMicrosoft Visual Studio .NET 7.1quotgt ltmeta
namequotCODE_LANGUAGEquot ContentquotCquotgt ltmeta namequotvs_defaultClientScriptquot contentquotJavaScriptquotgt ltmeta
namequotvs_targetSchemaquot
contentquot/intellisense/ie5quotgt lt/headgt ltbodygt ltform idquotForm1quot methodquotpostquot runatquotserverquotgt lt/formgt lt/bodygt lt/htmlgt using System using System.Collections using ponentModel using System.Data using System.Drawing using System.Web using System.Web.SessionState using System.Web.UI using System.Web.UI.WebControls using
System.Web.UI.HtmlControls namespace UploadFileWeb ...
///// ltsummarygt /// WebForm1 的摘要说明。/// lt/summarygt public class WebForm1 : System.Web.UI.Page ... private void Page_Loadobject sender System.EventArgs e ... // 在此处放置用户代码以初始化页面foreach string f in
Request.Files.AllKeys ... HttpPostedFile file Request.Filesf
file.SaveAsquotD:Tempquot file.FileName if
Request.ParamsquottestKeyquot null ...
Response.WriteRequest.ParamsquottestKeyquot Web 窗体设计器生成的代码region Web 窗体设计器生成的代码override protected void OnInitEventArgs e ... // // CODEGEN: 该调用是 Web 窗体设计器所必需的。// InitializeComponent base.OnInite ///// ltsummarygt /// 设计器支持所需的方法- 不要使用代码编辑器修改/// 此方法的内容。/// lt/summarygt private void InitializeComponent ... this.Load new System.EventHandlerthis.Page_Load endregion 其实这个页面跟我们平常写的上传文件代码是一样的在Web 页的Request对象中包含有Files这个对象里面就包含了通过POST方式上传的所有文件的信息这时所需要做的就是调用Request.Filesi.SaveAs方法。但是怎么让才能在WinForm里面模拟想Web Form POST 数据呢命名空间里面提供了两个非常有用的类一个是WebClient另外一个是HttpWebRequest类。如果我们不需要通过代理服务器来上传文件那么非常简单只需要简单的调用
WebClient.UploadFile方法就能实现上传文件private void button1_Clickobject sender System.EventArgs e ... WebClient myWebClient new WebClient
myWebClient.UploadFilequothttp://localhost/UploadFileWeb/