Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / web / ASP.NET

Uploading large files using ASP.NET and IIS6.0

5.00/5 (4 votes)
18 Apr 2013CPOL4 min read 36.6K  
This tip discusses the method to allow the uploading of large size files in ASP.NET

Introduction 

We all must have obviously uploaded files somewhere or the other. Even in the websites that we create using ASP.NET, we might have to put the asp:fileupload control to facilitate file upload feature. But in some cases, while developing websites or web applications, we might come across requirements that specify: Allow users to upload large files (file size typically greater than 10MB). This tip shows how one can facilitate the upload of large files in ASP.NET.  

Uploading Large Files 

In a scenario where user has to have the ability to upload large files, just putting a file upload control in our website isn’t sufficient. The reason is, the upload file size limit is set to 4MB by default in ASP.NET.

To allow large files to be uploaded in our website, we need to make a few configuration changes. The "<httpRuntime>" tag in the web.config file is where we need to change the file size limit.

The <httpRuntime> tag has an attribute "maxRequestLength" whose value is specified in "KiloBytes". Also, increase the value of the "executionTimeout" attribute of the same tag so that the uploading doesn’t time out before the entire file has been uploaded.  

The tag would look something like this:

<httpRuntime maxRequestLength="2097152" executionTimeout="9999999" />

This would allow for files upto 2GB to be uploaded. I have discussed this scenario more clearly in this post 

Next, we need to make changes at the IIS level. We have to increase the values of specific attributes in the IIS Metabase. 

The Metabase.xml file is the one we need to update to allow large files to be uploaded. This file is located at

C:\Windows\System32\inetsrv\

location.

But this file is by default in Read-Only mode.  

Procedure to make Metabase.xml editable: (FOR IIS 6.0 only)

  1. Open IIS manager (open Run -> type ‘inetmgr’ -> press enter)
  2. Right-click on the local computer name. Click on Properties.
  3. Enable the Checkbox that reads "Enable Direct Metabase Edit".
  4. Click on Apply. Then OK. 

The above procedure is only for IIS 6.0 as in IIS 7.0 and above, microsoft has removed the Enable Direct Metabase Edit option. I’ll come back to that later.

So, after the Metabase.xml file has been made editable, navigate to the file location. Its better to take a back up of the file before modifying it (just to be on the safe side). The attributes to be modified are:

  1. AspBufferingLimit
  2. AspMaxRequestEntityAllowed

The values of both the attributes are specified in "BYTES". Be careful about the units in which the values of these attributes are specified. The ones in IIS Metabase take values in BYTES. The one in the web.config file takes values in KILOBYTES

Modify the values in the above attributes and save the file. Technically, your website should allow the filesize that you've specified. But in my case, the website wasn't allowing files more than 49MB. I'm still yet to find out the reason for that. If there is any other way of allowing files greater than 49MB to be uploaded, please do share the same.  

Another thing I would like to add to this is that if you are using web service to upload the file to an external database, then you will have to update the binding configuration of the services as well.

When we add a service reference to our website, the corresponding service binding information is added to the web.config file in the website. To allow large files to be uploaded, the attributes in the binding information to be modified are: 

  1. maxBufferSize 
  2. maxReceiveMessageSize
  3. maxBufferPoolSize
  4. maxDepth
  5. maxStringContentLength 
  6. maxArrayLength

Also, make sure you increase the timeout values here as well.

Summary 

So, to summarize the above tip, the three steps you need to perform to allow large file uploads in your ASP.NET website/application are:

  1. Update <httpRuntime> tag. That is, update the values in maxRequestLength and executionTimeout attributes.
  2. Make the Metabase.xml file editable. Update the AspBufferingLimit and AspMaxRequestEntityAllowed attributes with required large values. 
  3. [Optional] If using web services in uploading the files, then make sure you update the above 5 attributes in the binding configurations as well. 

Please feel free to comment or make any corrections if required anywhere. 

Hope this helps! 

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)