首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

怎么上传大文件啊

2012-03-30 
如何上传大文件啊?这是我在网上查到了:第一部分:首先我们来说一下如何解决ASP.NET中的文件上传大小限制的

如何上传大文件啊?
这是我在网上查到了:
第一部分:
    首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文件来自定义最大文件大小,如下:

<httpRuntime executionTimeout="300" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>
这样上传文件的最大值就变成了4M,但这样并不能让我们无限的扩大MaxRequestLength的值,因为ASP.NET会将全部文件载入内存后,再加以处理。解决的方法是利用隐含的HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据。实现方法如下:

C# code
IServiceProviderprovider=(IServiceProvider)HttpContext.Current;HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));byte[]bs=wr.GetPreloadedEntityBody();if(!wr.IsEntireEntityBodyIsPreloaded()){Int  n=1024;byte[]  bs2=newbyte[n];while(wr.ReadEntityBody(bs2,n)>0)    {        }}

这样就可以解决了大文件的上传问题了。



但是我不知道这段代码应该怎么用。。。
我是用WebClient上传文件的,代码如下:
C# code
string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf("\\") + 1);        string uriString = @"D:\" + DateTime.Now.ToShortDateString();        string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);//文件名称+后缀        if (uriString.EndsWith(@"\") == false)        {            uriString = uriString + @"\";        }        uriString = uriString + fileName;        // 创建WebClient实例        WebClient myWebClient = new WebClient();        myWebClient.Credentials = CredentialCache.DefaultCredentials;        // 要上传的文件        FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);        BinaryReader r = new BinaryReader(fs);        try        {            //使用UploadFile方法可以用下面的格式            //myWebClient.UploadFile(uriString,"PUT",fileNamePath);            byte[] postArray = r.ReadBytes((int)fs.Length);            Stream postStream = myWebClient.OpenWrite(uriString, "PUT");            if (postStream.CanWrite)            {                postStream.Write(postArray, 0, postArray.Length);            }            else            {                return "No Write.";            }            postStream.Close();            return "Succefull";        }        catch (Exception ex)        {            return "Error:" + ex.Message;        }

当我上传30多兆的文件时可以上传成功,但是上传100多兆的资源时就会报错:Internet Explorer 无法显示该网页,上面这段代码应该怎么用啊?

[解决办法]
楼主看看我的贴子,好多牛人。。。
http://topic.csdn.net/u/20100928/17/7c1e409c-6219-4b13-81e1-8ff1e0534ac2.html
[解决办法]
webclient 走http 
用WebCLient也可能会造成内存泄露,
webclient和ftp都可以用来做大文件上传, 做好分块和断点。

热点排行