인터넷에는 매우 많은 파일 업로드 관련 컴포넌트가 떠돌아다니고 있다. 어떤 것들은 비용을 지불하고 구입해야 하는 것도 있으며,어떤 것은 공짜로 기능에 제한 없이 사용하는 것들도 있다. 이번에 설명하는 파일 업로드/다운로드 구현은 SiteGalaxytUpload 라는 컴포넌트를 이용하여 파일 업로드를 구현하는 방법을 설명하도록 한다. 애석하게도, FileSystemObject나 ADODB.RecordSet 등을 통해서는 파일 업로드를 직접 구현할 수 없다. 왜냐하면, 파일을 서버에 보내기 위해서는 FORM 태그에서 ENCTYPE=”multipart/form-data”라는 속성을 넣어 주어야 하는데, 이렇게 되면 ASP에서는 Request.Form 개체를 사용하지 못하게 된다. 결국, 파일을 업로드하기 위해서는 파일도 받아들일 수 있고, 입력 양식 데이타도 동시에 받아들일 수 있는 기능을 가진 별도의 컴포넌트를 이용해야 한다. 이를 위하여, 인터넷 상에는 파일 업로드를 구현해 주는 수 많은 컴포넌트가 있는데, 그 중 우리는 사용하기 쉬운 SiteGalaxyUpload 라는 이름의 컴포넌트를 사용해 보도록 한다. 아래와 같이 HTML 문서를 만들고, upload.htm 이라는 이름으로 저장한다. upload.htm
이 컴포넌트는 ASP 기반 자료실을 제작하는 데 많은 도움이 될 것이다.
가. 컴포넌트의 필요성
나. SiteGalaxyUpload 사용방법
(1) SiteGalaxyUpload 컴포넌트 설치
(2) 파일 업로드 페이지 제작
regsvr32 [현재 SiteGalaxyUpload.dll이 있는 경로+파일명] 을 입력하고 [확인]을 누른다
(아래의 경우는 SiteGalaxyUpload.dll이 C:\temp 밑에 있는 경우이다)
.
“DllRegisterServer in c:\temp\SiteGalaxyUpload.dll succeeded.”
이 메세지는 윈도우즈 레지스트리에 컴포넌트 정보가 이상없이 등록되었다는 뜻이며 이것으로 컴포넌트 설치는 완료된 것이다.
<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>
[출처] [asp] 사이트 갤럭시를 이용한 asp의 파일업로드|작성자 파란검정