Dan*_*nna 5 asp.net-mvc upload httppostedfilebase
我使用标准HTML <input>控件发布多部分表单数据将大文件上载到ASP.NET服务器.这是一个ASP.NET MVC应用程序.
根据MSDN,HttpPostedFile该类缓冲到磁盘开箱即用:
"文件以MIME multipart/form-data格式上传.默认情况下,大于256 KB的所有请求(包括表单字段和上传文件)都缓冲到磁盘,而不是保存在服务器内存中."
我想这意味着,当我访问HttpPostedFileBase我的控制器,当我访问HttpPostedFileBase的InputStream财产,我可以写某个文件缓冲区,而不必担心运行内存的服务器,这显然是一个不可行的解决方案.
这里有一些关于我如何处理每个传入文件的伪代码HttpPostedFileBase.
for(var i = 0; i< Request.Files.Count;i++)
{
var fileBase = Request.Files[i];
if (fileBase.ContentLength == 0)
{
continue;
}
// One thread per file
ThreadPool.QueueUserWorkItem(state =>
{
// Read from fileBase.InputStream
},
null);
}
Run Code Online (Sandbox Code Playgroud)
我的web.config的httpRuntime块如下所示:
<httpRuntime
executionTimeout="1200"
requestLengthDiskThreshold="2097151"
maxRequestLength="2097151"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100" />
Run Code Online (Sandbox Code Playgroud)
我的实现工作,多个文件按预期上传,除了服务器消耗缓冲整个有效负载所需的相同内存量.我必须假设InputStream正在缓冲所有内容.当我上传的文件多于我的内存时,它可以预测会崩溃OutOfMemoryException.这是上传800mb文件时内存峰值的图像.

我知道我可以使用Flash/Silverlight小部件或编写自定义HttpModule来截取上传并自己处理它们,但是如果HttpPostedFileMSDN说它做了什么(或者我做错了),当前的要求将完美无缺.
你为什么这么做
requestLengthDiskThreshold="2097151"
Run Code Online (Sandbox Code Playgroud)
在配置?这是否强制服务器将所有上载保留在RAM而不是缓冲到磁盘?
| 归档时间: |
|
| 查看次数: |
1751 次 |
| 最近记录: |