使用 Asp.Net MVC 和 IIS 上传大于 3GB 的文件

Posted

技术标签:

【中文标题】使用 Asp.Net MVC 和 IIS 上传大于 3GB 的文件【英文标题】:uploading file larger than 3GB with Asp.Net MVC and IIS 【发布时间】:2016-11-06 19:07:55 【问题描述】:

我的 MVC 应用程序中有一个 HTTP PUT Web API 方法,它从客户端接收文件并将其放入服务器存储。

由于文件大小可能很大,我没有将文件流式传输到内存中以避免内存溢出异常,因此我使用 MultipartFormDataStreamProvider 将其加载到临时文件夹中,然后移动稍后到达最终目的地。

除了不上传大于 2097148 KB (2.097GB) 的文件之外,一切都运行良好。 一旦我提供了一个大于它的文件,它就会在 Temp 文件夹中开始流式传输,然后在文件大小达到 2097148 KB 时停止。

我的 web.config 文件中有以下属性:

ma​​xRequestLength="5097151",

requestLengthDiskThreshold="50971",

ma​​xAllowedContentLength="4242880000".

另外,在 IIS 中,我已将 最大允许内容长度(字节) 设置为 4242880000 KB。

还有其他地方可能导致这种情况发生吗?

【问题讨论】:

您使用的是哪个 IIS 版本? @AndreiRînea,我使用的是 IIS 7.5。 【参考方案1】:

更新

似乎即使在带有 .NET 4.6.1 的 IIS 10 下,请求也被拒绝(400 Bad Request),即使所有限制都设置为允许它。

进一步挖掘,似乎this has been rejected 在微软。


在 .Net 4.0 及更早版本中,ASP.NET 中有 2Gb 的限制,即was fixed in .Net 4.5。但是这个修复有点意义,因为 IIS 本身不支持超过 2Gb 的文件上传。

将超过 2Gb 的文件上传到 IIS 托管服务器的唯一方法是将其分成几块并逐块上传。以下是可以上传文件分段的客户端:

    IT Hit Ajax File Browser Sample WebDAV Browser

请注意,这些客户端要求您的服务器支持带有 Range 标头的 PUT。

另一个解决方案是创建一个基于 HttpListener 的服务器。与 IIS 相比,HttpListener 的功能要少得多,但它没有任何上传限制。


source

【讨论】:

如果 IIS 不允许大于 2GB 的文件,为什么我可以将 IIS 中的“最大允许内容长度(字节)”设置为 4GB?

以上是关于使用 Asp.Net MVC 和 IIS 上传大于 3GB 的文件的主要内容,如果未能解决你的问题,请参考以下文章

asp.net MVC 中添加了Resource.resx资源文件,本地使用正常,部署到IIS后提示找不到指定的文件

ASP.NET MVC 6 使用 IIS 开发无需发布

通过 AJAX POST 请求(IIS 7、ASP.NET MVC 4)向服务器传递大文件时出错

诊断 IIS 7 和 ASP.NET MVC 上的 404 错误

如何使用 IIS 7.5 压缩来自 ASP.NET MVC 的 Json 结果

在 IIS 上使用 .NET Core 运行 ASP.NET 5 (MVC 6)