Web Trenches

IIS7 File Upload Size Limits



By default, IIS7 limits file upload to 30MB.  Oddly, it returns a 404 error if someone uploads something larger than 30MB.   The docs from Microsoft
are a little confusing on this, so I thought I would try to clarify.

According to the following article, you can “Remove the maxAllowedContentLength property.” from the applicationhost.config file in IIS7 to lift the 30MB limit.  However, in my case, this property was never in the file to begin with.

http://support.microsoft.com/kb/942074/

So, my assumption on this is that the 30MB limit is somewhere internal to IIS7.  The article also doesn't say where to ADD the entry requestLimits node if it isn't already there.

Luckily, there is an alternate solution that can be enabled at the site level rather than server-wide.

<system.webServer>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength=”524288000″/>
            </requestFiltering>
        </security>
</system.webServer>

If you add the above code to the web.config file for your site, you can control the maximum upload size for your site.  In many cases, the system.webServer node will already be in the file, so just add the security node within that.

Note that the maxAllowedContentLength is in BYTES not kilobytes.

You may also need to restart your Web site (not the whole server) to enable the setting.

In case you are curious, why would I want people to upload files larger than 30MB?  We were working on a video conversion script that allows people to upload large MOV files and converts them to FLV.

39 Replies to “IIS7 File Upload Size Limits”

  1. A simle solution….

    Open IIS 7 SnapIn
    Select the website you want enable to accept large file uploads.
    In the main window double click ‘Request filtering’
    once the window is opened you may see on top a list of tabs eg: file name extensions, rules, hidden segments and so on…
    regardless the tab you select, in the main window rightclick and select “Edit Feature Settings” and modify the “Maximum allowed content length (bytes)”

    Now you can upload files larger than 30 MB ….

    1. Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.Parameter name: input

  2. thanks.

    With this solution,…
    I’m uploading larger file (150 Mb), what happend with the time for uploading larger files, it´s too longer..

    can i to reduce this time?

    Thanks

  3. Any chance to upload a file over 2Gb in one piece? I need to upload files of at least 10Gb, otherwise IIS is not an option for me. As far as I understand 2Gb is the IIS and ASP.NET limitation, is it fixed in IIS 8 / ASP.NET 4.5?

  4. For some reason the solution above does not help for files over 2GB. We are setting a value to max which is 3.99GB and is
    Any idea what else should we try?

  5. This is a good article. I am running mojoportal lates edition in mendiumtrust web config. I still don’t get the result on live server. Only capable for uploading image file under 40kb only. I also have set the time out limit to 3600. Everything works well on local. Is there anymore settings to be set for this purpose??? Any help would be appreciated. Thanks.

  6. Then the issue arises, if you have a lot of clients that run IIS 7 or 7.5, how do I script this so that I can update it through a process….ahhh….here is the VB script for it (it’ll add the necessary lines to the web.config)…hope this comes out OK.

    ‘< ---Universal Variables--->

    dim xmlDom
    dim appSettingsNode
    dim childNode

    ‘< ---Main Program--->

    Set objFSO = CreateObject(“Scripting.FileSystemObject”)

    If objFSO.FileExists(“Q:\stw\web.config”) Then
    set xmlDom = CreateObject(“Microsoft.XMLDOM”)
    xmlDom.async = false
    xmlDom.load(“Q:\stw\web.config”)
    Dim objCurrNode, objNewNode, objNewText
    makeSecurity()
    addData()
    xmlDom.Save(“Q:\stw\web.config”)
    Else
    Wscript.quit
    End If

    ‘< ---Sub to Make Elements--->

    Sub makeSecurity()
    set appSettingsNode1 = xmlDom.documentElement.selectSingleNode(“/configuration/system.webServer”)
    set objNewNode = xmlDom.createElement(“security”)
    appSettingsNode1.appendChild objNewNode
    Set objNewNode2 = xmlDom.createElement(“requestFiltering”)
    objNewNode.appendChild objNewNode2
    End Sub

    ‘< ---Sub to Add Node and Attributes--->‘

    Sub addData()
    set appSettingsNode2 = xmlDom.documentElement.selectSingleNode(“/configuration/system.webServer/security/requestFiltering”)
    Set childNode = xmlDom.CreateNode(1, “requestLimits”, “”)
    call childNode.setAttribute(“maxAllowedContentLength”, “524288000”)
    appSettingsNode2.appendChild childNode
    End Sub

  7. Then the issue arises, if you have a lot of clients that run IIS 7 or 7.5, how do I script this so that I can update it through a process….ahhh….here is the VB script for it (it’ll add the necessary lines to the web.config)…hope this comes out OK.

    ‘< ---Universal Variables--->

    dim xmlDom
    dim appSettingsNode
    dim childNode

    ‘< ---Main Program--->

    Set objFSO = CreateObject(“Scripting.FileSystemObject”)

    If objFSO.FileExists(“Q:\stw\web.config”) Then
    set xmlDom = CreateObject(“Microsoft.XMLDOM”)
    xmlDom.async = false
    xmlDom.load(“Q:\stw\web.config”)
    Dim objCurrNode, objNewNode, objNewText
    makeSecurity()
    addData()
    xmlDom.Save(“Q:\stw\web.config”)
    Else
    Wscript.quit
    End If

    ‘< ---Sub to Make Elements--->

    Sub makeSecurity()
    set appSettingsNode1 = xmlDom.documentElement.selectSingleNode(“/configuration/system.webServer”)
    set objNewNode = xmlDom.createElement(“security”)
    appSettingsNode1.appendChild objNewNode
    Set objNewNode2 = xmlDom.createElement(“requestFiltering”)
    objNewNode.appendChild objNewNode2
    End Sub

    ‘< ---Sub to Add Node and Attributes--->‘

    Sub addData()
    set appSettingsNode2 = xmlDom.documentElement.selectSingleNode(“/configuration/system.webServer/security/requestFiltering”)
    Set childNode = xmlDom.CreateNode(1, “requestLimits”, “”)
    call childNode.setAttribute(“maxAllowedContentLength”, “524288000”)
    appSettingsNode2.appendChild childNode
    End Sub

  8. hello All

    I have my project about Download file from web server with ASP. I’m use IIS is Web server.

    if I’m specify

    Response.ContentType = “application/octet-stream”

    for download file type is “.txt” It Work But

    If if I’m specify = “application/octet-stream”

    for download file type is “.exe” size of file 856 KB.
    It not Work.

    I’m not Understand

    Help me please. Thank you

Leave a Reply

Your email address will not be published. Required fields are marked *