使用 Asp.Net MVC 和 IIS 上传大于 3GB 的文件
uploading file larger than 3GB with Asp.Net MVC and IIS
我在我的 MVC 应用程序中有一个 HTTP PUT web API 方法,它从客户端接收文件并将其放入服务器存储。
由于文件可能很大,我没有将文件流式传输到内存中以避免内存越界异常,因此我使用 MultipartFormDataStreamProvider 将其加载到临时文件夹,稍后将其移动到最终目的地。
除无法上传大于 2097148 KB (2.097GB) 的文件外,一切正常。
一旦我提供的文件大于该文件,它就会开始将其流式传输到 Temp 文件夹中,然后在文件大小达到 2097148 KB 时停止。
我的 web.config 文件中有以下属性:
maxRequestLength="5097151",
requestLengthDiskThreshold="50971",
maxAllowedContentLength="4242880000".
我还在 IIS 中将 最大允许内容长度(字节) 设置为 4242880000 KB。
是否还有其他地方可能导致这种情况发生?
更新
似乎即使在带有 .NET 4.6.1 的 IIS 10 下,请求也被拒绝(400 错误请求),尽管所有限制都设置为允许它。
进一步挖掘似乎 this has been rejected 在 Microsoft。
在 .Net 4.0 及更早版本中,ASP.NET 有 2Gb 的限制,即 was fixed in .Net 4.5。但是这个修复有点意义,因为 IIS 本身不支持超过 2Gb 的文件上传。
将超过 2Gb 的文件上传到 IIS-hosted 服务器的唯一方法是将其分解成多个部分并逐个上传。以下是可以将文件分成几段上传的客户端:
请注意,这些客户端需要您的服务器支持范围为 header 的 PUT。
另一个解决方案是创建一个 HttpListener-based 服务器。与 IIS 相比,HttpListener 的功能要少得多,但它没有任何上传限制。
我在我的 MVC 应用程序中有一个 HTTP PUT web API 方法,它从客户端接收文件并将其放入服务器存储。
由于文件可能很大,我没有将文件流式传输到内存中以避免内存越界异常,因此我使用 MultipartFormDataStreamProvider 将其加载到临时文件夹,稍后将其移动到最终目的地。
除无法上传大于 2097148 KB (2.097GB) 的文件外,一切正常。 一旦我提供的文件大于该文件,它就会开始将其流式传输到 Temp 文件夹中,然后在文件大小达到 2097148 KB 时停止。
我的 web.config 文件中有以下属性:
maxRequestLength="5097151",
requestLengthDiskThreshold="50971",
maxAllowedContentLength="4242880000".
我还在 IIS 中将 最大允许内容长度(字节) 设置为 4242880000 KB。
是否还有其他地方可能导致这种情况发生?
更新
似乎即使在带有 .NET 4.6.1 的 IIS 10 下,请求也被拒绝(400 错误请求),尽管所有限制都设置为允许它。
进一步挖掘似乎 this has been rejected 在 Microsoft。
在 .Net 4.0 及更早版本中,ASP.NET 有 2Gb 的限制,即 was fixed in .Net 4.5。但是这个修复有点意义,因为 IIS 本身不支持超过 2Gb 的文件上传。
将超过 2Gb 的文件上传到 IIS-hosted 服务器的唯一方法是将其分解成多个部分并逐个上传。以下是可以将文件分成几段上传的客户端:
请注意,这些客户端需要您的服务器支持范围为 header 的 PUT。
另一个解决方案是创建一个 HttpListener-based 服务器。与 IIS 相比,HttpListener 的功能要少得多,但它没有任何上传限制。