It’s me

July 2, 2007

Visual C# .NET을 사용하여 ASP.NET에서 웹 서버에 파일 업로드

Filed under: ASP.NET — rothmans @ 5:58 pm

HOWTO: Visual C# .NET을 사용하여 ASP.NET에서 웹 서버에 파일 업로드

적용 대상

이 문서의 Microsoft Visual Basic .NET 버전에 대한 내용은 323245를 참조하십시오.

작업 내용

요약

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

맨 위로

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

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

  1. Microsoft Visual Studio .NET을 시작합니다.
  2. 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 누릅니다.
  3. 새 프로젝트 대화 상자의 프로젝트 형식에서 Visual C# 프로젝트를 누른 다음 템플릿에서 ASP.NET 웹 응용 프로그램을 누릅니다.
  4. 위치 상자에 URL을 입력하여 프로젝트를 만듭니다. 이 예에서 http://localhost/CSharpUpload를 입력하면 CSharpUpload라는 기본 프로젝트 이름이 만들어집니다. WebForm1.aspx 파일이 Visual Studio .NET의 디자이너 보기에 로드됩니다.

맨 위로

Data 디렉터리 만들기

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

  1. Visual Studio .NET의 솔루션 탐색기 창에서 CSharpUpload를 마우스 오른쪽 단추로 누르고 추가를 누른 다음 새 폴더를 누릅니다. 기본적으로 NewFolder1이라는 이름의 폴더가 새로 만들어집니다.
  2. 폴더 이름을 Data로 바꾸려면 NewFolder1을 마우스 오른쪽 단추로 누르고 이름 바꾸기를 누른 다음 Data를 입력합니다.
  3. Windows 탐색기를 시작한 다음 2단계에서 만든 Data 파일 시스템 폴더를 찾습니다. 기본적으로 이 폴더는 아래 폴더에 있습니다.

    C:\Inetpub\wwwroot\CSharpUpload\Data

  4. 보안 설정을 변경하여 Data 디렉터리에 대한 쓰기 권한을 부여하려면 Data를 마우스 오른쪽 단추로 누른 다음 등록 정보를 누릅니다.
  5. Data 등록 정보 대화 상자에서 보안 탭을 누른 다음 추가를 누릅니다.
  6. 사용자 또는 그룹을(를) 선택하십시오. 대화 상자에서 ASPNET 계정을 누른 다음 추가를 누릅니다. 확인을 눌러 사용자 또는 그룹을(를) 선택하십시오. 대화 상자를 닫습니다.
  7. aspnet_wp account (computername\ASPNET) 계정을 누른 후 다음 사용 권한에 대해 허용 확인란을 선택합니다.
    • 읽기 및 실행
    • 폴더 내용 보기
    • 읽기
    • 쓰기

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

  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.cs 코드 숨김 파일에 업로드 코드 추가

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

  1. 보기 메뉴에서 디자인을 누릅니다.
  2. Upload를 두 번 누릅니다. Visual Studio가 WebForm1.aspx.cs 코드 숨김 파일을 열고 자동으로 다음과 같은 메서드 코드를 생성합니다.
    private void Submit1_ServerClick(object sender, System.EventArgs e) {   }
  3. WebForm1.cs 파일의 클래스 수준에 다음과 같은 코드가 존재하는지 확인합니다.
    protected System.Web.UI.HtmlControls.HtmlInputFile File1; protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;

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

    public class WebForm1 : System.Web.UI.Page {
  4. 다음 코드를 찾습니다.
    private void Submit1_ServerClick(object sender, System.EventArgs e) {
  5. Enter 키를 눌러 빈 줄을 삽입한 후 다음 코드를 추가합니다.
    if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) ) { 	string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); 				string SaveLocation = Server.MapPath("Data") + "\\" +  fn; 	try 	{ 		File1.PostedFile.SaveAs(SaveLocation); 					Response.Write("The file has been uploaded."); 	} 	catch ( Exception ex ) 	{ 		Response.Write("Error: " + ex.Message); 	} } else { 	Response.Write("Please select a file to upload."); }

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

  6. Submit1 서브루틴이 다음과 같이 나타나는지 확인합니다.
    private void Submit1_ServerClick(object sender, System.EventArgs e) {	if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) ) 	{ 		string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); 		string SaveLocation = Server.MapPath("Data") + "\\" +  fn; 		try 		{ 			File1.PostedFile.SaveAs(SaveLocation); 			Response.Write("The file has been uploaded."); 		} 		catch ( Exception ex ) 		{ 			Response.Write("Error: " + ex.Message); 		} 	} 	else 	{ 		Response.Write("Please select a file to upload."); 	} }

맨 위로

응용 프로그램 테스트

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 매개 변수를 변경해야 합니다.

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

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

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

Machine.config 파일은 C:\WINNT\Microsoft.NET\Framework\v1.0.3705\CONFIG 디렉터리에 있습니다.

맨 위로

전체 코드 예제

WebForm1.aspx

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CSharpUpload.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML>   <HEAD>     <title>WebForm1</title>     <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">     <meta name="CODE_LANGUAGE" Content="C#">     <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" 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" NAME="Submit1"> </form>  	   </body> </HTML>

맨 위로

WebForm1.aspx.cs

using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;  namespace CSharpUpload { 	/// <summary> 	/// Summary description for WebForm1. 	/// </summary> 	public class WebForm1 : System.Web.UI.Page 	{ 		protected System.Web.UI.HtmlControls.HtmlInputFile File1; 		protected System.Web.UI.HtmlControls.HtmlInputButton Submit1; 	 		private void Page_Load(object sender, System.EventArgs e) 		{ 			// Put user code to initialize the page here 		}  		#region Web Form Designer generated code 		override protected void OnInit(EventArgs e) 		{ 			//  			// CODEGEN: This call is required by the ASP.NET Web Form Designer. 			//  			InitializeComponent(); 			base.OnInit(e); 		} 		 		/// <summary> 		/// Required method for Designer support - do not modify 		/// the contents of this method with the code editor. 		/// </summary> 		private void InitializeComponent() 		{     			this.Submit1.ServerClick += new System.EventHandler(this.Submit1_ServerClick); 			this.Load += new System.EventHandler(this.Page_Load);  		} 		#endregion  private void Submit1_ServerClick(object sender, System.EventArgs e) { 	if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) ) 	{ 		string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName); 		string SaveLocation = Server.MapPath("Data") + "\\" +  fn; 		try 		{ 			File1.PostedFile.SaveAs(SaveLocation); 			Response.Write("The file has been uploaded."); 		} 		catch ( Exception ex ) 		{ 			Response.Write("Error: " + ex.Message); 		} 	} 	else 	{ 		Response.Write("Please select a file to upload."); 	} } 	} }

맨 위로

참조

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

<httpRuntime> 요소
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gngrfhttpruntimesection.asp

INPUT 요소
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/input.asp

ENCTYPE 특성
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/enctype.asp

HtmlInputFile 클래스
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuihtmlcontrolshtmlinputfileclasstopic.asp

HtmlInputFile.PostedFile 속성
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIHtmlControlsHtmlInputFileClassPostedFileTopic.asp

맨 위로

No Comments Yet »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Blog at WordPress.com.