Is there a way to ignore the maxRequestLength limit of 2GB file uploads?

31,047

Solution 1

Considering the Type of MaxRequestLength is a Int, at the moment there is no way to parse a value higher than Int.Max correctly.

I heard they might be increasing IIS8 but nothing concrete from Microsoft as of yet. The only way I've seen in .Net 4.5 is to use HttpRequest.GetBufferlessInputStream which

Gets a Stream object that can be used to read the incoming HTTP entity body, optionally disabling the request-length limit that is set in the MaxRequestLength property.

Solution 2

In my case these were the changes I needed to apply:

<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>

In order to add the serverRuntime follow the intructions in the first answer of this question

Share:
31,047
Steven
Author by

Steven

Updated on August 16, 2020

Comments

  • Steven
    Steven over 3 years

    Here's where I'm setting maxRequestLength to 2GB (the max value), which indicates the maximum request size supported by ASP.NET:

    <system.web>
        <httpRuntime maxRequestLength="2097151" executionTimeout="3600"/>
        ...
    

    and here I'm setting the maxAllowedContentLength to 4GB (the max value), which specifies the maximum length of content in a request supported by IIS

    <system.webServer>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="4294967295"/>
            </requestFiltering>
        </security>
        ...
    

    I'd like to be able to upload files up to 4GB, but I'm limited by the maxRequestLength field.

    I noticed that this third party upload tool (http://www.element-it.com/onlinehelp/webconfig.html) has a ignoreHttpRuntimeMaxRequestLength property, which allows it to upload files up to 4GB.

    Does anyone know if I can ignore the maxRequestLength value like this other upload tool does?

  • vane
    vane over 11 years
    Good point, I didn't realize maxRequestLength was int and not uint. It would kind of make more sense for it to be a uint since your request length can never be negative.
  • IT Hit WebDAV
    IT Hit WebDAV over 10 years
    As far as I understand Microsoft fixed ASP.NET upload limit but did not fix IIS: aspnet.uservoice.com/forums/41199-general-asp-net/suggestion‌​s/…
  • poizan42
    poizan42 about 6 years
    MaxRequestLength is in KB, the max value is 2 TB not GB. This is not the problem, but the fact that the normal buffered input stream as well as all as the multipart formdata parser etc. breaks down on more than 2GB. The only way around it is really GetBufferlessInputStream and parsing the request yourself.
  • Erik Philips
    Erik Philips about 6 years
    @poizan42 Yes, however maxAllowedContentLength is a UINT in bytes, so the max appears to be 4gb.
  • poizan42
    poizan42 about 6 years
    Yes, however note that you can get rid of that by removing the RequestFilteringModule altogether from your site. After that you start hitting issues with the ASP.NET ISAPI modules failing on Content-Length headers larger than MAX_UINT because they insists on parsing it before handing off to your code. I got around it by using a rewrite rule to remove the Content-Length header (saving it in a server variable first). After that you need to read the request directly using a HttpWorkerRequest.
  • Erik Philips
    Erik Philips about 6 years
    @poizan42 Good information, you may want to write your own answer here! (I would suggest it)