加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 为什么HttpPostedFile不像广告和缓冲区下载到磁

发布时间:2020-12-16 06:56:19 所属栏目:asp.Net 来源:网络整理
导读:我使用标准 HTML input将大文件上传到ASP.NET服务器控制发布多部分表单数据.这是一个ASP.NET MVC应用程序. 根据MSDN,HttpPostedFile类开箱即用缓冲到磁盘: “Files are uploaded in MIME multipart/form-data format. By default,all requests,including fo
我使用标准 HTML< input>将大文件上传到ASP.NET服务器控制发布多部分表单数据.这是一个ASP.NET MVC应用程序.

根据MSDN,HttpPostedFile类开箱即用缓冲到磁盘:

“Files are uploaded in MIME
multipart/form-data format. By
default,all requests,including form
fields and uploaded files,larger than
256 KB are buffered to disk,rather
than held in server memory.”

我认为这意味着当我在我的控制器中访问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);
}

我的web.config的httpRuntime块如下所示:

<httpRuntime
  executionTimeout="1200"
  requestLengthDiskThreshold="2097151"
  maxRequestLength="2097151"
  useFullyQualifiedRedirectUrl="false"
  minFreeThreads="8"
  minLocalRequestFreeThreads="4"
  appRequestQueueLimit="100" />

我的实现工作,多个文件按预期上传,除了服务器消耗缓冲整个有效负载所需的相同内存量.我必须假设InputStream正在缓冲所有内容.当我上传的文件多于我的内存时,它可以预测会因OutOfMemoryException而崩溃.这是上传800mb文件时内存峰值的图像.

我知道我可以使用Flash / Silverlight小部件或编写自定义HttpModule来拦截上传并自己处理它们,但是如果HttpPostedFile做了MSDN所说的那样(或者我做错了),当前的要求将完美无缺.

解决方法

你为什么这么做

requestLengthDiskThreshold="2097151"

在配置?这是否强制服务器将所有上载保留在RAM而不是缓冲到磁盘?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读