his step-by-step article describes how to upload a file to a Web server by using Visual Basic .NET. In this article, you create an ASP.NET file (WebForm1.aspx) and its related code-behind file (WebForm1.aspx.vb) to upload files to a directory that is named Data.
Create the ASP.NET Application
- Start Microsoft Visual Studio .NET.
- On the File menu, point to New, and then click Project.
- In the New Project dialog box, click Visual Basic Projects under Project Types, and then click ASP.NET Web Application under Templates.
- In the Location box, type the URL to create the project. For this example, type http://localhost/VBNetUpload, which creates the default project name of VBNetUpload. Notice that the WebForm1.aspx file loads in the Designer view of Visual Studio .NET.
- In the Solution Explorer window of Visual Studio .NET, right-click VBNetUpload, point to Add, and then click New Folder. By default, a new folder that is named NewFolder1 is created.
- To change the folder name to Data, right-click NewFolder1, click Rename, and then type Data.
- Start Windows Explorer, and then locate the Data file system folder that you created in Step 2. By default, this folder is located in the following folder:
- To change the security settings to grant write permissions to the Data directory, right-click Data, and then click Properties.
- In the Data Properties dialog box, click the Security tab, and then click Add.
- In the Select Users or Groups dialog box, click the ASPNET account, and then click Add. Click OK to close the Select Users or Groups dialog box.
- Click the aspnet_wp account (computername\ASPNET) account, and then click to select the Allow check boxes for the following permissions:
- Click OK to close the Data Properties dialog box. You have successfully modified the Data directory permissions to accept user-uploaded files.
- Return to the open instance of Visual Studio .NET. WebForm1.aspx should be open in the Designer window.
- To view the HTML source of the WebForm1.aspx page, right-click WebForm1.aspx in the Designer window, and then click View HTML Source.
- Locate the following HTML code, which contains the <form> tag:
- Add the enctype="multipart/form-data" name-value attribute to the <form> tag as follows:
- After the opening <form> tag, add the following code:
- Verify that the HTML <form> tag appears as follows:
- On the View menu, click Design.
- Double-click Upload. Visual Studio opens the WebForm1.aspx.vb code-behind file and automatically generates the following method code:
- Verify that the following code exists at the class level of the WebForm1.vb file:
- Locate the following code:
- Press ENTER to add a blank line, and then add the following code:
This code first verifies that a file has been uploaded. If no file was selected, you receive the "Please select a file to upload" message. If a valid file is uploaded, its file name is extracted by using the System.IO namespace, and its destination is assembled in a SaveAs path. After the final destination is known, the file is saved by using the File1.PostedFile.SaveAs method. Any exception is trapped, and the exception message is displayed on the screen.
- Verify that the Submit1 subroutine appears as follows:
- On the Build menu, click Build Solution.
- In Solution Explorer, right-click WebForm1.aspx, and then click View in Browser.
- After WebForm1.aspx opens in the browser, click Browse.
- In the Choose File dialog box, select a file that is smaller than 4 megabytes (MB), and then click Open.
- To upload the file, click Upload. Notice that the file uploads to the Web server and that you receive the "The file has been uploaded" message.
- Return to the open instance of Windows Explorer, and then locate the Data directory.
- Verify that the file has been uploaded to the Data directory.
By default, ASP.NET permits only files that are 4,096 kilobytes (KB) (or 4 megabytes [MB]) or less to be uploaded to the Web server. To upload larger files, you must change the maxRequestLength parameter of the <httpRuntime> section in the Web.config file.
Note: When the maxRequestLength attribute is set in the Machine.config file and then a request is posted (for example, a file upload) that exceeds the value of maxRequestLength, a custom error page cannot be displayed. Instead, Microsoft Internet Explorer will display a "Cannot find server or DNS" error message.
Theoretically, the maximum file upload size is fairly large. However, because of ASP.NET health monitoring, you cannot upload very large files in ASP.NET. The ASP.NET worker process has a virtual address space of 2 gigabytes (GB). However, the ASP.NET worker process only uses a little more than 1 GB because of health monitoring and memory fragmentation.
During the upload process, ASP.NET loads the whole file in memory before the user can save the file to the disk. Therefore, the process may recycle because of the memoryLimit attribute of the processModel tag in the Machine.config file. The memoryLimit attribute specifies the percentage of physical memory that the ASP.NET worker process can exhaust before the process is automatically recycled. Recycling prevents memory leaks from causing ASP.NET to crash or to stop responding.
Additionally, other factors play a role in the maximum file size that can be uploaded. These factors include available memory, available hard disk space, processor speed, and current network traffic. With regular traffic of files being uploaded, Microsoft recommends that you use a maximum file size in the range of 10 to 20 megabytes (MB). If you rarely upload files, the maximum file size may be 100 MB.
Note: You can upload files that are larger than 100 MB in ASP.NET. However, Microsoft recommends that you follow the maximum file upload sizes that are mentioned in this article. To determine more precise file sizes, perform stress testing on computers that are similar to the ones that will be used in production.
aspnet_wp.exe (PID:PIDNumber) was recycled because memory
consumption exceeded the SizeLimit MB (Percentage percent of
You may also find that uploads occur very slowly. If you watch the Aspnet_wp.exe process in Windows Task Manager, you will notice that the memory delta changes by 64 KB every 1 to 2 seconds. Depending on the size of the file, this delay may cause the ASP.NET worker process to recycle because of a responseDeadlock error.