当前位置:编程学习 > C#/ASP.NET >>

求asp.net大文件分块上传实例源码

我的网站现在有一个文件上传功能(20M左右的PDF文件),本地测试上传大文件没问题,发布到服务器上就之能上传 2M 左右的文件(webConfig文件修改如下: <httpRuntime maxRequestLength="2000000" executionTimeout="5020"/>),没有效果,求高手实例代码,尽量不要添加插件就可以解决最好,代码越简单越容易理解最好 谢谢!~
追问:老大,我在那个网站上已经搜了很久了 就是找不到我想要的源码,所以才来这求助!~你给我一个这样的答案  我怎么跟你分啊!~郁闷......(我感觉你应该给我 个 百度 或者 GOOGLE  的网站更好一些)
答案:
asp.net 分块上传文件
发布时间:2009-07-27                  来源:成都网站建设--中成网建         【加入收藏】

一般的在Asp.net里上传文件都是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            

上一个:asp.net自定义控件,属性问题
下一个:asp.net 怎样封装成web 桌面应用程序?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,