기존 ASP에서 클라이언트 컴퓨터에서 서버로 파일을 업로드하기 위해서는 개발자가 업로드에 관련된 컴포넌트를 직접 만들던가 타사 제품의 COM 컴포넌트(써드파티 컴포넌트)를 이용하여야 하였다. 가장 손쉬운 방법은 SA-FileUp이나 ASPUpload 같은 써드파티 컴포넌트를 사용하는 것이다. 이 컴포넌트를 보통 regsvr32.exe란 툴을 사용해서 등록한후에 ASP에서 사용할 수 있었다. 이를 하기 위해서는 로컬로서 접속하여야 하고 이 컴포넌트를 업데이트하거나 제거하기 위해서는 웹서버가 정지하여야 하였다. 또한 타사 제품이기 때문에 돈이 든다.

ASP.NET에서는 다른 COM 컴포넌트 필요없이 업로드를 할 수 있는 기능을 제공한다. 이는 닷넷 프레임웍의 HtmlInputFile 클래스를 통해서 구현된다. 이 클래스의 인스턴스를 생성하고나면 몇줄의 코드로서 업로드 기능을 구현할 수 있다. 이제 파일의 업로드에 대해서 알아보자. 또한 업로드 폴더 생성같은 부가적인 기능도 추가해보겠다.

파일경로 입력

파일을 업로드하기 위해서는 서버사이드 폼을 사용하여야 한다. 중요한점은 폼에 ENCTYPE="Multipart/Form-Data" 속성이 명시되어야 한다. 다음으로 input 컨트롤을 추가하자.

<input type="file" id="ID" runat="server" />

runat="server"는 매우 중요하다. 이 컨트롤은 단순한 텍스트박스처럼 보인다. 하지만 runat="server"로 인하여 서버컨트롤로 인식된다. Browse버튼을 누르면 로컬 컴퓨터의 파일을 선택할 수 있는 상자가 나타난다.

Form에 encType을 꼭 넣어주도록 하자. 그리고 HtmlInputFile 컨트롤과 그 아래에 버튼컨트롤과 파일의 이름등의 정보를 보여주는 레이블 컨트롤을 추가하였다. HtmlInputFile 컨트롤의 형식은 다음과 같다.

<Input
          Type="File"
          RunAt="Server"
          ID="고유하게할 아이디"
          Accept="MIME 인코딩"
          MaxLength="파일의 최대크기 설정"
          Size="파일경로를 입력받을 텍스트박스의 길이" >

이제 코드부분을 보도록 하자.

System.IO 네임스페이스를 추가하자.

업데이트할 디렉터리로 D:\Test로 지정하였다. 이 디렉터리가 있는지 또는 생성을 위해서 DirectoryInfo 클래스가 필요하다. 이때문에 System.IO 네임스페이스를 추가한 것이다. 폴더가 존재하지 않는다면 이 폴더를 생성하고 레이블에 생성하였다는 메시지를 출력한다.

이것은 Upload버튼을 눌렀을때의 이벤트 핸들러이다. 각각의 레이블에 해당하는 정보를 출력하도록 하고 GetFileName 메서드를 사용하여 파일 이름을 가져온다. 그리고 SaveAs 메서드를 사용하여 지정한 디렉터리에 가져온 파일이름으로 저장한다.

디렉터리가 존재하지 않을때 실행시킨 화면이다. 디렉터리가 생성되었다.

찾아보기 버튼을 누르면 로컬 컴퓨터의 파일을 선택할 수 있다.

선택하고 Upload버튼을 눌렀을때의 화면이다.

실제 폴더에 파일이 업로드 되었다.

제공 : 코리아인터넷닷컴, a 2002년 06월 28일
저자 : Tribikram Rath

'.net' 카테고리의 다른 글

ASP.NET Spiced: AJAX  (2) 2007.05.03
ASP.NET에서 구글의 API 사용  (1) 2007.05.03
비동기식 통신(Asynchronous communication)  (0) 2007.05.03
C#으로 작성하는 웹 서비스  (0) 2007.05.03
성공적인 데이터 액세스를 위한 팁  (0) 2007.05.03

+ Recent posts