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

Ben*_*min 5 c# iis asp.net-mvc upload asp.net-web-api

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

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

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

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

最大请求长度=“5097151”,

requestLengthDiskThreshold =“50971”,

maxAllowedContentLength =“4242880000”。

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

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

And*_*nea 5

更新

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

进一步挖掘,这似乎已被微软拒绝。


在 .Net 4.0 及更早版本中,ASP.NET 存在 2Gb 限制,该限制已在 .Net 4.5 中修复。不过这个修复还是有一定意义的,因为 IIS 本身不支持超过 2Gb 的文件上传。

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

  1. IT 流行 Ajax 文件浏览器
  2. WebDAV 浏览器示例

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

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


来源