C# 有没有办法忽略2GB文件上传的maxRequestLength限制?
这里我将C# 有没有办法忽略2GB文件上传的maxRequestLength限制?,c#,asp.net,iis,iis-7,C#,Asp.net,Iis,Iis 7,这里我将maxRequestLength设置为2GB(最大值),这表示ASP.NET支持的最大请求大小: <system.web> <httpRuntime maxRequestLength="2097151" executionTimeout="3600"/> ... 我希望能够上传高达4GB的文件,但我受到maxRequestLength字段的限制 我注意到这个第三方上传工具(http://www.element-it.com/onlinehelp/
maxRequestLength
设置为2GB(最大值),这表示ASP.NET支持的最大请求大小:
<system.web>
<httpRuntime maxRequestLength="2097151" executionTimeout="3600"/>
...
我希望能够上传高达4GB的文件,但我受到maxRequestLength
字段的限制
我注意到这个第三方上传工具(http://www.element-it.com/onlinehelp/webconfig.html)具有ignoreHttpRuntimeMaxRequestLength
属性,允许上载高达4GB的文件
有人知道我是否可以像其他上传工具那样忽略
maxRequestLength
值吗?您应该能够通过向应用程序的web.config中添加相同的节点来覆盖machine.config中的设置,就像这样。微软有一些关于的信息
注意:Erik Philips是正确的,maxRequestLength
的最大大小是2147483647(Int32.MaxValue
)。这个答案是为了说明如何从应用程序的web.config中重写machine.config(或any.config)中定义的设置/
<configuration>
...
<system.web>
<httpRuntime maxRequestLength="2147483647"/>
...
...
</system.web>
...
</configuration>
...
...
...
...
但是,在执行此操作时,您可能还希望增加超时,或者超时。考虑到is a的类型,目前无法解析高于正确值的值
我听说他们可能会增加IIS8,但微软到目前为止还没有具体的消息。我在.NET4.5中看到的唯一方法就是使用
获取可用于读取传入HTTP实体正文的流对象,可以选择禁用在MaxRequestLength属性中设置的请求长度限制
就我而言,这些是我需要应用的更改:
<system.web>
<httpRuntime targetFramework="4.6.1" maxRequestLength="2147483647" />
</system.web>
<system.webServer>
<serverRuntime uploadReadAheadSize="2147483647" />
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
</system.webServer>
要添加服务器运行时,请按照的第一个答案中的说明进行上传?我的理解是,您可以使用分块传输编码上载大于2GB的文件,因为分块传输编码不包括内容长度头,因此不使用maxRequestLength。据我所知,大多数浏览器不支持分块传输编码。请尝试使用以下方法:。我使用JavaScript分离文件并在服务器端合并它们。这也有帮助:很好,我没有意识到
maxRequestLength
是int
而不是uint
。如果它是一个uint
,则更有意义,因为您的请求长度永远不能为负。据我所知,Microsoft固定了ASP.NET上载限制,但没有固定IIS:MaxRequestLength以KB为单位,最大值为2 TB而不是GB。这不是问题所在,但事实上,正常的缓冲输入流以及多部分formdata解析器等都会在2GB以上发生故障。唯一的解决方法是真正的GetBufferlessInputStream并自己解析请求。@poizan42是的,但是是一个以字节为单位的UINT,因此最大值似乎是4gb。是的,但是请注意,您可以通过从站点中完全删除RequestFilteringModule来消除此问题。在这之后,您开始遇到ASP.NET ISAPI模块在大于MAX_UINT的内容长度头上失败的问题,因为它们坚持在传递给您的代码之前对其进行解析。我通过使用重写规则删除Content-Length头(首先将其保存在服务器变量中)来解决这个问题。之后,您需要使用HttpWorkerRequest直接读取请求。
<system.web>
<httpRuntime targetFramework="4.6.1" maxRequestLength="2147483647" />
</system.web>
<system.webServer>
<serverRuntime uploadReadAheadSize="2147483647" />
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
</system.webServer>