- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
I分块上传文件
分块上传文件HttpModelApp.dll文件一起使用,并注意配置。
一般的在A里上传文件都是10m左右,要做到大文件上传,必须要改web.config,不过改了web.config有时候也上传不成功,那是每次上传的文件太大,浏览器在这个过程中会超时,采用分块上传的方法就可以避免这种情况。 2.分块上传就是利用post的方法,把数据分块上传,每块上传的数据量少,不会引起超时的问题。不说了,看代码吧。 Code 1 //实现IHttpModule接口 2 public class HttpUploadModule : IHttpModule 3 { 4 public HttpUploadModule() 5 { 6 7 } 8 9 public void Init(HttpApplication application) 10 { 11 //订阅事件 12 application.BeginRequest += new EventHandler(this.Application_BeginRequest); 13 } 14 15 public void Dispose() 16 { 17 } 18 19 private void Application_BeginRequest(Object sender, EventArgs e) 20 { 21 HttpApplication app = sender as HttpApplication; 22 HttpWorkerRequest request = GetWorkerRequest(app.Context); 23 Encoding encoding = app.Context.Request.ContentEncoding; 24 25 int bytesRead = 0; // 已读数据大小 26 int read; // 当前读取的块的大小 27 int count = 8192; // 分块大小 28 byte[] buffer; // 保存所有上传的数据 29 30 if (request != null) 31 { 32 // 返回 HTTP 请求正文已被读取的部分。 33 byte[] tempBuff = request.GetPreloadedEntityBody(); //要上传的文件 34 35 // 如果是附件上传 36 if (tempBuff != null IsUploadRequest(app.Request)) //判断是不是附件上传 37 { 38 // 获取上传大小 39 // 40 long length = long.Parse(request.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength)); 41 42 buffer = new byte[length]; 43 count = tempBuff.Length; // 分块大小 44 45 // 将已上传数据复制过去 46 // 47 Buffer.BlockCopy(tempBuff, //源数据 48 0, //从0开始读 49 buffer, //目标容器 50 bytesRead, //指定存储的开始位置 51 count); //要复制的字节数。 52 53 54 // 开始记录已上传大小 55 bytesRead = tempBuff.Length; 56 57 // 循环分块读取,直到所有数据读取结束 58 while (request.IsClientConnected() !request.IsEntireEntityBodyIsPreloaded() bytesRead length) 59 { 60 // 如果最后一块大小小于分块大小,则重新分块 61 if (bytesRead + count length) 62 { 63 count = (int)(length - bytesRead); 64 tempBuff = new byte[count]; 65 } 66 67 // 分块读取 68 read = request.ReadEntityBody(tempBuff, count); 69 70 // 复制已读数据块 71 Buffer.BlockCopy(tempBuff, 0, buffer, bytesRead, read); 72 73 // 记录已上传大小 74 bytesRead += read;
文档评论(0)