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>