我的MVC应用程序中有一个 HTTP PUT Web API方法,它从客户端接收文件并将其放入服务器存储。
由于文件大小可能很大,我没有将文件流式传输到内存中以避免内存超出绑定异常,因此我使用 MultipartFormDataStreamProvider 将其加载到临时文件夹中,然后移动它到了最后的目的地。
除了不上传大于2097148 KB(2.097GB)的文件这一事实外,一切都很完美。 一旦我提供的文件大于该文件,它就会在Temp文件夹中开始流式传输,然后一旦文件大小达到2097148 KB就会停止。
我的web.config文件中包含以下属性:
的maxRequestLength =" 5097151",
requestLengthDiskThreshold =" 50971",
maxAllowedContentLength =" 4242880000"
同样在IIS中,我将允许的最大内容长度(字节数)设置为4242880000 KB。
还有其他可能导致这种情况发生的地方吗?
答案 0 :(得分:2)
<强>更新强>
即使在带有.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托管服务器的唯一方法是将其分成几块并逐段上传。以下是可以将文件分组为段的客户端:
请注意,这些客户端要求您的服务器支持带有Range标头的PUT。
另一种解决方案是创建基于HttpListener的服务器。与IIS相比,HttpListener的功能要少得多,但它没有任何上传限制。