업로드 컴포넌트 SiteGalaxyUpload 사용방법
인터넷에는 매우 많은 파일 업로드 관련 컴포넌트가 떠돌아다니고 있다. 어떤 것들은 비용을 지불하고 구입해야 하는 것도 있으며,어떤 것은 공짜로 기능에 제한 없이 사용하는 것들도 있다. 이번에 설명하는 파일 업로드/다운로드 구현은 SiteGalaxytUpload 라는 컴포넌트를 이용하여 파일 업로드를 구현하는 방법을 설명하도록 한다.
이 컴포넌트는 ASP 기반 자료실을 제작하는 데 많은 도움이 될 것이다.
가. 컴포넌트의 필요성
애석하게도, FileSystemObject나 ADODB.RecordSet 등을 통해서는 파일 업로드를 직접 구현할 수 없다. 왜냐하면, 파일을 서버에 보내기 위해서는 FORM 태그에서 ENCTYPE="multipart/form-data"라는 속성을 넣어 주어야 하는데, 이렇게 되면 ASP에서는 Request.Form 개체를 사용하지 못하게 된다.
결국, 파일을 업로드하기 위해서는 파일도 받아들일 수 있고, 입력 양식 데이타도 동시에 받아들일 수 있는 기능을 가진 별도의 컴포넌트를 이용해야 한다. 이를 위하여, 인터넷 상에는 파일 업로드를 구현해 주는 수 많은 컴포넌트가 있는데, 그 중 우리는 사용하기 쉬운 SiteGalaxyUpload 라는 이름의 컴포넌트를 사용해 보도록 한다.
나. SiteGalaxyUpload 사용방법
(1) SiteGalaxyUpload 컴포넌트 설치
먼저, 파일(SiteGalaxyUpload.zip, 75 KB)을 다운로드 받는다.
압축을 푼뒤 "SiteGalaxyUpload.dll" 파일을 Winnt\system32 에 복사를 한다
시작->실행-> regsvr32 c:\winnt\system32\SiteGalaxyUpload.dll
"DllRegisterServer in c:\winnt\system32\SiteGalaxyUpload.dll succeeded."
이 메세지는 윈도우즈 레지스트리에 컴포넌트 정보가 이상없이 등록되었다는 뜻이며 이것으로 컴포넌트 설치는 완료된 것이다.
(2) 파일 업로드 페이지 제작
아래와 같이 HTML 문서를 만들고, upload.htm 이라는 이름으로 저장한다.
upload.htm
<HTML>
<BODY>
<FORM METHOD=POST ACTION=upload.asp
ENCTYPE="multipart/form-data">
<INPUT TYPE=FILE NAME=FILE1 VALUE="검색..."><P>
<INPUT TYPE=SUBMIT VALUE="파일 업로드">
</FORM>
</BODY>
</HTML>
다음으로, 파일을 업로드하는 upload.asp를 아래와 같이 작성한다.
upload.asp
<%
Set uploadForm = Server.CreateObject ("SiteGalaxyUpload.Form")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
uploadForm("FILE1").SaveAs(
"c:\temp\" & fso.GetFileName(uploadForm("FILE1").FilePath))
Response.Write("File Upload Success!")
%>
이제, 앞에서 작성한 프로그램을 테스트 해 보기 위해서 upload.htm을 웹 브라우저로 연다.
마우스로 [찾아보기...]버튼을 눌러서 대화 상자를 이용하여 업로드하고자 하는 임의의 파일을 하나 선택한다. 여기서는 C: 드라이브에 있는 C:\bootlog.txt 파일을 선택했다고 가정해 보자.
파일의 선택이 끝나고 [파일 업로드] 버튼을 누르면, 파일이 웹 서버에 업로드 되는데, 내컴퓨터나 탐색기를 이용하여 C:\TEMP 디렉토리를 찾아가 보면, 파일이 업로드 되었는지를 확인할 수 있다.
(3) MapPath를 이용하여 업로드 디렉토리 지정
위의 예에서는 업로드된 파일들이 지정된 C:\TEMP 디렉토리로만 가도록 되어 있는데, 만일 이 디렉토리가 없는 경우에는 에러가 발생한다. 따라서, 서버객체의 하나인 MapPath 라는 것을 이용하여 웹페이지의 특정 가상디렉토리에 파일을 올리는 예를 공부할 필요가 있다.
upload.asp
<%
Set uploadForm = Server.CreateObject ("SiteGalaxyUpload.Form")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
strDir = Server.MapPath("/file")
uploadForm("FILE1").SaveAs( strDir & "\" &_
fso.GetFileName(uploadForm("FILE1").FilePath))
Response.Write("File Upload Success!")
%>
위에서, Server.MapPath("/file")는 /file 이라는 가상디렉토리의 실제 경로를 리턴하는데, 사전에 웹공유 명령을 이용하여 임의의 디렉토리를 /file 이라는 가상디렉토리로 만들어 주어야 한다.
다. 파일 업로드 정보의 데이터베이스 관리
업로드된 파일에 관한 정보와 업로드한 사람의 이름을 데이터베이스에 저장해 두었다가 필요시에 그 목록을 작성하거나 혹은 파일을 다운로드 할 수 있도록 하는 방법에 대해 살펴 본다. 파일을 업로드한 사람의 이름과 파일명을 입력하기 위한 업로드 폼 HTML은 다음과 같다.
upload.htm
<HTML>
<BODY>
<FORM METHOD=POST ACTION="UPLOAD.ASP" ENCTYPE="multipart/form-data">
<INPUT TYPE=TEXT NAME="NAME" size=8> <br>
<INPUT TYPE=FILE NAME="UPFILE" VALUE="검색"> <br>
<INPUT TYPE=SUBMIT VALUE="파일전송">
</FORM>
</BODY>
</HTML>
위의 폼으로부터 전송된 값을 저장할 수 있도록 데이터베이스에 작성자와 파일 두 개의 필드를 갖는 테이블을 만든후에 이를 fileupload 라는 이름으로 ODBC를 설정한다.
다음으로 전송된 파일을 저장하기 위한 ASP 프로그램을 살펴보면 다음과 같다.
upload.asp
<HTML>
<BODY>
<%
Set UploadForm=Server.CreateObject("SiteGalaxyUpload.Form")
Set FSO=Server.CreateObject("Scripting.FileSystemObject")
name = UploadForm("NAME")
filename = FSO.GetFileName(UploadForm("UPFILE").FilePath)
strDir = Server.MapPath("/file")
UploadForm("UPFILE").SaveAs(strDir & "\" & filename)
'ODBC 를 이용한 데이터베이스 연결을 선언한다......................
Set Dbcon = Server.CreateObject("ADODB.Connection")
Dbcon.Open "DSN=fileupload;uid=;pwd=;"
strSql = " INSERT INTO fileupload (작성자, 파일) values ('" &_
name & "', '" & filename & "' )"
Dbcon.Execute(strSql)
Dbcon.Close
Set Dbcon=Nothing
Set FSO=Nothing
Set UploadForm=nothing
%>
파일 업로드가 정상적으로 이루어졌습니다
</BODY>
</HTML>
이제, 업로드된 파일들의 목록과 작성자를 화면에 나타낸 후에 파일에 다운로드 링크를 추가하여 웹으로부터 파일을 다운로드 받을 수 있도록 하는 프로그램을 작성하면 다음과 같다.
view.asp
<HTML>
<BODY>
<%
'ODBC 를 이용한 데이터베이스 연결을 선언한다......................
Set Dbcon = Server.CreateObject("ADODB.Connection")
Dbcon.Open "DSN=fileupload;uid=;pwd=;"
strSql = " SELECT 작성자, 파일 FROM fileupload "
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open strSQL,Dbcon,adOpenStatic
'해당 레코드가 있으면
if not rs.EOF then
do while not rs.EOF
filepath = "/file" & rs("파일")
%>
성 명: <%=rs("작성자")%>
파일명: <%=rs("파일")%>
<A HREF="<%=filepath%>">다운로드</A>
<BR>
<%
rs.MoveNext
loop
else
%>
하나도 없습니다
<%
end if
rs.Close
Dbcon.Close
Set Dbcon=Nothing
%>
</BODY>
</HTML>
댓글