.NET Server

Uploading Large Files to IIS / NET. Core / ASP.NET

In this article

Uploading Large Files to IIS / NET. Core / ASP.NET

While the IT Hit WebDAV Server Engine can process files of any size (up to 8,589,934,592 Gb) the hosting environment or you WebDAV client may not support large files upload.

Max Upload File Size in .NET Core

If you run your server on .NET Core, to set the maximum file upload size use the MaxRequestBodySize property. This property exists for both Kestrel (KestrelServerLimits.MaxRequestBodySize) and for IIS (IISServerOptions.MaxRequestBodySize), you will set this option depending on which web server you run your code. To completely remove the file upload limit set this property to null:

services.Configure<IISServerOptions>(options =>
            {
                options.MaxRequestBodySize = null;
            });
services.Configure<KestrelServerOptions>(options =>
            {
                options.Limits.MaxRequestBodySize = null;
            });

Removing the Request Filtering Module in IIS

If you run your server in IIS, in addition to setting the MaxRequestBodySize property, you must also remove the Request Filtering module. Even though this module provides configuration options, it can not process files over 2Gb max and will intercept the request before .NET Core can process it. To remove the Request Filtering module:

  1. Unlock the RequestFilteringModule on the server level in IIS in Modules. To enable files upload over 2Gb unlock the Request Filtering module on the server level
  2. Remove the RequestFilteringModule on the site level: 
      <system.webServer>
        <modules>
          <remove name="RequestFilteringModule"/>
        </modules>
      </system.webServer>
    

Max Upload File Size in IIS and ASP.NET (.NET Framework)

If you host your WebDAV server in IIS and run your server on ASP.NET .NET Framework you must specify the file maximum upload size in web.config of your web application. By default maximum upload size is set to 4096 KB (4 MB) by ASP.NET. To increase the upload limit add an appropriate section to your web.config file and specify the limit:

In the case of IIS 7.x and later, both Integrated and Classic mode:

This code is part of WebDAV Server File System sample provided with IT Hit WebDAV Server Engine for .NET

                            
                        

In the case of IIS 6.0:

This code is part of WebDAV Server File System sample provided with IT Hit WebDAV Server Engine for .NET

                            
                        

The maximum file upload segment size for both ASP.NET 2.0 and ASP.NET 4.0 is 2097151Kb = 2Gb. To upload files over 2Gb, you need to run your server on .NET Core or you need the client application with resumable upload support.

Unlike with .NET Core, removing the Request Filtering module in case of .NET Framework project would not help to overcome the 2Gb limit, because the 2Gb limit also hardcoded in ASP.NET (.NET Framework) code itself.

If you need to upload files larger than 2Gb you must implement resumable upload interfaces and upload files with segments. Note that you will need the WebDAV client application that supports resumable upload, in this case, such as IT Hit Ajax Browser or WebDAV Sample Browser. They automatically detect that your server is hosted in IIS, brake file into 2Gb segments and upload a file segment by segment.

Upload Content Buffering in ASP.NET 2.0

The file upload is performed differently in ASP.NET 4.0-based application, HttpListener-based application and in ASP.NET 2.0-based application. While ASP.NET 4.0 and HttpListener passes file content directly to the engine, the ASP.NET 2.0 first saves file content in a temporary folder limiting upload capabilities and increasing server load. To avoid upload buffering in ASP.NET 2.0 on servers side, the IT Hit WebDAV Server Engine provides ITHitPutUploadProgressAndResumeModule that also significantly improves upload speed. To use the module in your web application add it to modules section in web.config:

In the case of IIS 7.x Integrated mode:

This code is part of WebDAV Server File System sample provided with IT Hit WebDAV Server Engine for .NET

                            
                        

In the case of IIS 7.x Classic mode and IIS 6.0:

This code is part of WebDAV Server File System sample provided with IT Hit WebDAV Server Engine for .NET

                            
                        

If you enable this module in ASP.NET 4.0 application it will be ignored.

Always enable ITHitPutUploadProgressAndResumeModule in the following cases:    
- If you are running your application in Visual Studio Development Server (not recommended).
- If you are implementing resumable upload interfaces and hosting your server in ASP.NET 2.0.

With ITHitPutUploadProgressAndResumeModule module you must always use the ContextWebAsync(HttpContext) constructor.

Upload Timeout

To prevent canceling script execution when uploading a large file to the application hosted in IIS / ASP.NET you must increase script timeout value:

This code is part of WebDAV Server File System sample provided with IT Hit WebDAV Server Engine for .NET

                            
                        

This code is part of WebDAV Server File System sample provided with IT Hit WebDAV Server Engine for .NET

                            
                        

Note that if you store your data in a database, often timeout may be caused by a database connection.

Next Article:

Creating WebDAV Server With Search Support (DASL)