How to upload a file to a Web server in ASP.NET by using Visual Basic .NET (323245)
The information in this article applies to:
- Microsoft ASP.NET (included with the .NET Framework) 1.0
- Microsoft Visual Basic .NET (2002)
- Microsoft ASP.NET (included with the .NET Framework 1.1)
- Microsoft Visual Basic .NET (2003)
This article was previously published under Q323245
For a Microsoft Visual C# .NET version of this article, see 323246.
IN THIS TASKSUMMARY This 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. Back to the topCreate the ASP.NET application In Microsoft Visual Studio .NET, follow these steps to create a
new application to upload files to the Web server:
- 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.
Back to the topCreate the Data directory After you create the application, you create the Data directory
that will accept uploaded files. After you create this directory, you must also
set write permissions for the ASPNET worker account.
- 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:
C:\Inetpub\wwwroot\VBNetUpload\Data
- 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 or the Network Service account if you are using Microsoft Internet Information Services (IIS) 6.0, and then click to select the Allow check boxes for the following permissions:
- Read and Execute
- List Folder Contents
- Read
- Write
Click to clear any other Allow and Deny check boxes. - Click OK to close the Data Properties dialog box. You have successfully modified the Data directory
permissions to accept user uploaded files.
Back to the topModify the WebForm1.aspx page To modify the HTML code of the WebForm1.aspx file to permit users
to upload files, follow these steps:
- 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:
<form id="Form1" method="post" runat="server">
- Add the enctype="multipart/form-data" name-value attribute to the <form> tag as follows:
<form id="Form1" method="post" enctype="multipart/form-data" runat="server">
- After the opening <form> tag, add the following code:
<INPUT type=file id=File1 name=File1 runat="server" />
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" />
- Verify that the HTML <form> tag appears as follows:
<form id="Form1" method="post" enctype="multipart/form-data" runat="server">
<INPUT type=file id=File1 name=File1 runat="server" />
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" />
</form>
Back to the topAdd the upload code to the WebForm1.aspx.vb code-behind file To modify the WebForm1.aspx.vb code-behind file so that it
accepts the uploaded data, follow these steps:
- 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:
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
End Sub
- Verify that the following code exists at the class level of
the WebForm1.vb file:
Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton
Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile
If this code does not exist in the file, add the code into the file
after the following line:
Inherits System.Web.UI.Page
- Locate the following code:
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
- Press ENTER to add a blank line, and then add the following
code:
If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
Try
File1.PostedFile.SaveAs(SaveLocation)
Response.Write("The file has been uploaded.")
Catch Exc As Exception
Response.Write("Error: " & Exc.Message)
End Try
Else
Response.Write("Please select a file to upload.")
End If
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:
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
Try
File1.PostedFile.SaveAs(SaveLocation)
Response.Write("The file has been uploaded.")
Catch Exc As Exception
Response.Write("Error: " & Exc.Message)
End Try
Else
Response.Write("Please select a file to upload.")
End If
End Sub
Back to the topTest the application To build your Visual Studio .NET solution and to test the
application, follow these steps:
- 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.
Back to the topUpload larger files 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. If you want to change
this setting for all of the computer and not just this ASP.NET application, you
must modify the Machine.config file. By default, the <httpRuntime> element is set to the following parameters in the Machine.config
file:
<httpRuntime
executionTimeout="90"
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>
The Machine.config file is located in the
\ System Root\Microsoft.NET\Framework\ Version Number\Config
folder. Back to the topComplete code listingWebForm1.aspx
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="VBNetUpload.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
<meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
<meta name=vs_defaultClientScript content="JavaScript">
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" enctype="multipart/form-data" method="post" runat="server">
<INPUT type=file id=File1 name=File1 runat="server" >
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" NAME="Submit1">
</form>
</body>
</HTML>
Back to the topWebForm1.aspx.vb
Public Class WebForm1
Inherits System.Web.UI.Page
Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile
Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
End Sub
Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
Try
File1.PostedFile.SaveAs(SaveLocation)
Response.Write("The file has been uploaded.")
Catch Exc As Exception
Response.Write("Error: " & Exc.Message)
End Try
Else
Response.Write("Please select a file to upload.")
End If
End Sub
End Class
Back to the topMORE INFORMATIONTheoretically, 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. You may notice the following error messages if
you encounter file size limits during the file upload process:
The page cannot be
displayed. Server Application is
Unavailable In the event log, the error message will be similar to the
following: aspnet_wp.exe
(PID:PIDNumber) was recycled because memory
consumption exceeded the SizeLimit MB
(Percentage percent of available
RAM).Exception of type
System.OutOfMemoryException was thrown.
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. REFERENCES For additional information, visit the following Microsoft
Developer Network (MSDN) Web sites: Back to the top
Modification Type: | Minor | Last Reviewed: | 11/3/2004 |
---|
Keywords: | kbProgramming kbHOWTOmaster kbServerControls KB323245 kbAudDeveloper |
---|
|