Visual Basic .NET을 사용하여 ASP.NET에서 웹 서버에 파일을 업로드하는 방법

이 문서의 Microsoft Visual C# .NET 버전에 대한 내용은 을 참조하십시오.

작업 내용

요약

이 문서에서는Visual Basic .NET을 사용하여 웹 서버에 파일을 업로드하는 방법을 단계별로 설명합니다. 이 문서에서는 ASP.NET 파일(WebForm1.aspx)과 해당 관련 코드 숨김 파일(WebForm1.aspx.vb)을 만들어 Data라는 이름의 디렉터리에 파일을 업로드합니다.

맨 위로

ASP.NET 응용 프로그램 만들기

Microsoft Visual Studio .NET에서 새 응용 프로그램을 만들어 웹 서버에 파일을 업로드하려면 다음과 같이 하십시오.

  1. Microsoft Visual Studio .NET을 시작합니다.

  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 누릅니다.

  3. 새 프로젝트 대화 상자의 프로젝트 형식에서 Visual Basic 프로젝트를 누른 다음 템플릿에서 ASP.NET 웹 응용 프로그램을 누릅니다.

  4. 위치 상자에 URL을 입력하여 프로젝트를 만듭니다. 이 예에서는 http://localhost/VBNetUpload를 입력하여 VBNetUpload라는 이름의 기본 프로젝트를 만듭니다. WebForm1.aspx 파일은 Visual Studio .NET의 디자이너 보기에 로드됩니다.

맨 위로

Data 디렉터리 만들기

응용 프로그램을 만든 후에는 업로드한 파일을 저장할 Data 디렉터리를 만듭니다. 또한 이 디렉터리를 만든 후에 ASPNET 작업자 계정에 대한 쓰기 권한을 설정해야 합니다.

  1. Visual Studio .NET의 솔루션 탐색기 창에서 VBNetUpload를 마우스 오른쪽 단추로 누르고 추가를 가리킨 다음 새 폴더를 누릅니다. 기본적으로 NewFolder1이라는 이름의 폴더가 새로 만들어집니다.

  2. 폴더 이름을 Data로 바꾸려면 NewFolder1을 마우스 오른쪽 단추로 누르고 이름 바꾸기를 누른 다음 Data를 입력합니다.

  3. Windows 탐색기를 시작한 다음 2단계에서 만든 Data 파일 시스템 폴더를 찾습니다. 기본적으로 이 폴더는 아래 폴더에 있습니다.

    C:\Inetpub\wwwroot\VBNetUpload\Data

  4. 보안 설정을 변경하여 Data 디렉터리에 대한 쓰기 권한을 부여하려면 Data를 마우스 오른쪽 단추로 누른 다음 속성을 누릅니다.

  5. Data 등록 정보 대화 상자에서 보안 탭을 누른 다음 추가를 누릅니다.

  6. 사용자 또는 그룹을(를) 선택하십시오. 대화 상자에서 ASPNET 계정을 누른 다음 추가를 누릅니다. 확인을 눌러 사용자 또는 그룹을(를) 선택하십시오. 대화 상자를 닫습니다.

  7. Microsoft Internet Information Services(IIS) 6.0을 사용하는 경우 aspnet_wp account (computername\ASPNET) 계정이나 Network Service 계정을 누른 후 다음 사용 권한에 대해 허용 확인란을 선택합니다.

    • 읽기 및 실행

    • 폴더 내용 보기

    • 읽기

    • 쓰기


    그 밖의 다른 허용 확인란과 거부 확인란은 모두 선택 취소합니다.

  8. 확인을 눌러 Data 등록 정보 대화 상자를 닫습니다. Data 디렉터리 사용 권한이 성공적으로 수정되어 사용자가 업로드한 파일이 저장됩니다.

맨 위로

WebForm1.aspx 페이지 수정

사용자가 파일을 업로드할 수 있도록 WebForm1.aspx 파일의 HTML 코드를 수정하려면 다음과 같이 하십시오.

  1. 앞에서 연 Visual Studio .NET의 인스턴스로 돌아옵니다. WebForm1.aspx가 디자이너 창에서 열립니다.

  2. WebForm1.aspx 페이지의 HTML 소스를 보려면 디자이너 창에서 WebForm1.aspx를 마우스 오른쪽 단추로 누른 다음 HTML 소스 보기를 누릅니다.

  3. <form> 태그가 포함되어 있는 다음 HTML 코드를 찾습니다.

    <form id="Form1" method="post" runat="server">
  4. 다음과 같이 <form> 태그에 enctype="multipart/form-data" 이름-값 특성을 추가합니다.

    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
  5. 여는 <form> 태그 뒤에 다음 코드를 추가합니다.

    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
  6. HTML <form> 태그가 아래와 같은지 확인합니다.

    <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>

맨 위로

WebForm1.aspx.vb 코드 숨김 파일에 업로드 코드 추가

업로드한 데이터를 받아들이도록 WebForm1.aspx.vb 코드 숨김 파일을 수정하려면 다음과 같이 하십시오.

  1. 보기 메뉴에서 디자인을 누릅니다.

  2. Upload를 두 번 누릅니다. Visual Studio에서 WebForm1.aspx.vb 코드 숨김 파일을 열고 자동으로 다음과 같은 메서드 코드를 생성합니다.

    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick

    End Sub
  3. WebForm1.vb 파일의 클래스 수준에 다음과 같은 코드가 있는지 확인합니다.

    Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton
    Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile

    이 코드가 파일에 없으면 다음 줄 뒤에 코드를 추가합니다.

    Inherits System.Web.UI.Page
  4. 다음 코드를 찾습니다.

    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
  5. Enter 키를 눌러 빈 줄을 삽입한 후 다음 코드를 추가합니다.

    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

    이 코드는 파일이 업로드되었는지 가장 먼저 확인합니다. 파일을 선택하지 않은 경우에는 "Please select a file to upload." 메시지가 나타납니다. 올바른 파일을 업로드한 경우에는 System.IO 네임스페이스를 사용하여 파일 이름이 추출되고 대상이 SaveAs 경로에서 어셈블됩니다. 최종 대상을 알게 되면 File1.PostedFile.SaveAs 메서드를 사용하여 파일이 저장됩니다. 예외가 트래핑되면 예외 메시지가 화면에 표시됩니다.

  6. Submit1 서브루틴이 다음과 같이 나타나는지 확인합니다.

    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

맨 위로

응용 프로그램 테스트

Visual Studio .NET 솔루션을 빌드하고 응용 프로그램을 테스트하려면 다음과 같이 하십시오.

  1. 빌드 메뉴에서 솔루션 빌드를 누릅니다.

  2. 솔루션 탐색기 창에서 WebForm1.aspx를 마우스 오른쪽 단추로 누른 다음 브라우저에서 보기를 누릅니다.

  3. WebForm1.aspx가 브라우저에서 열리면 찾아보기를 누릅니다.

  4. 파일 선택 대화 상자에서 크기가 4MB보다 작은 파일을 선택한 다음 열기를 누릅니다.

  5. 파일을 업로드하려면 Upload를 누릅니다. 파일이 웹 서버에 업로드되고 "The file has been uploaded." 메시지가 나타납니다.

  6. 열려 있는 Windows 탐색기의 인스턴스로 돌아와서 Data 디렉터리를 찾습니다.

  7. 파일이 Data 디렉터리에 업로드되었는지 확인합니다.

맨 위로

큰 파일 업로드

기본적으로 ASP.NET에서는 크기가 4,096KB(또는 4MB) 이하인 파일만 웹 서버에 업로드할 수 있습니다. 이보다 큰 파일을 업로드하려면 Web.config 파일에서 <httpRuntime> 섹션의 maxRequestLength 매개 변수를 변경해야 합니다.

참고 maxRequestLength 특성이 Machine.config 파일에 설정되어 있는 경우 maxRequestLength 값을 초과하는 요청이 게시되면(예: 파일 업로드) 사용자 지정 오류 페이지를 표시할 수 없습니다. 대신, Microsoft Internet Explorer에서 "서버를 찾을 수 없거나 DNS 오류입니다." 오류 메시지를 표시합니다.

이 ASP.NET 응용 프로그램뿐만 아니라 모든 컴퓨터에 대해 이 설정을 변경하려면 Machine.config 파일을 수정해야 합니다.

기본적으로 <httpRuntime> 요소는 Machine.config 파일에서 다음과 같은 매개 변수로 설정되어 있습니다.

<httpRuntime 
executionTimeout="90"
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>

Machine.config 파일은 \System Root\Microsoft.NET\Framework\Version Number\Config 폴더에 있습니다.

맨 위로

전체 코드 예제

WebForm1.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>

맨 위로

WebForm1.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

맨 위로

추가 정보

이론적으로 최대 파일 업로드 크기는 상당히 크지만 ASP.NET에서는 ASP.NET 상태 모니터링 때문에 매우 큰 파일을 업로드할 수 없습니다. ASP.NET 작업자 프로세스에는 2GB의 가상 주소 공간이 있지만 ASP.NET 작업자 프로세스는 상태 모니터링과 메모리 조각화 때문에 1GB가 조금 넘는 공간만 사용합니다.

업로드 프로세스 중 ASP.NET은 사용자가 디스크에 파일을 저장할 수 있도록 메모리에 전체 파일을 로드합니다. 따라서 Machine.config 파일에 있는 processModel 태그의 memoryLimit 특성 때문에 작업자 프로세스가 재활용될 수 있습니다. memoryLimit 특성은 ASP.NET 작업자 프로세스가 자동으로 재활용될 때까지 소모할 수 있는 실제 메모리의 비율을 지정합니다. 재활용을 하면 메모리 누수로 인해 ASP.NET이 작동을 멈추거나 응답하지 않는 현상이 방지됩니다.

또한 업로드할 수 있는 최대 파일 크기에 영향을 미치는 다른 요소도 있습니다. 이러한 요소에는 사용 가능한 메모리, 사용 가능한 하드 디스크 공간, 프로세서 속도 및 현재 네트워크 트래픽이 있습니다. 업로드되는 파일의 일반적인 트래픽을 고려할 때 10~20MB 범위의 최대 파일 크기를 사용하는 것이 좋습니다. 파일을 드물게 업로드하는 경우 최대 파일 크기는 100MB가 될 수 있습니다.


참고 ASP.NET에서 100MB보다 큰 파일도 업로드할 수 있지만 이 문서에서 설명하는 최대 파일 업로드 크기를 따르는 것이 좋습니다. 더욱 정확한 파일 크기를 결정하려면 프로덕션 환경에서 사용할 컴퓨터와 비슷한 컴퓨터에서 스트레스 테스트를 수행하십시오.

파일 업로드 프로세스 중 파일 크기 한도에 도달하면 다음과 같은 오류 메시지가 나타날 수 있습니다.

  • 페이지를 표시할 수 없습니다.

  • 서버 응용 프로그램을 사용할 수 없습니다.

    이벤트 로그에 기록되는 오류 메시지는 다음과 유사합니다.

  • System.OutOfMemoryException 형식의 예외가 Throw되었습니다.

업로드가 매우 느리게 되는 것을 확인할 수도 있습니다. Windows 작업 관리자에서 Aspnet_wp.exe 프로세스를 보면 메모리 변화량이 1~2초마다 64KB씩 변경되었음을 알 수 있습니다. 파일의 크기에 따라 이러한 지연이 발생하면 responseDeadlock 오류 때문에 ASP.NET 작업자 프로세스가 재활용될 수 있습니다.

참조

자세한 내용을 보려면 다음 MSDN(Microsoft Developer Network) 웹 사이트를 방문하십시오.

맨 위로



Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 에 참여하시기 바랍니다.

추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

소중한 의견에 감사드립니다.

피드백을 주셔서 감사합니다. Office 지원 에이전트와 연락하는 것이 도움이 될 것 같습니다.

×