Dext(덱스트) 업로드 사용

http://www.dextsolution.com/Product/dextUpload05.aspx#a02

파일 업로드 기본 1. 간단한 업로드 2. 다중파일 업로드 3. 다른 폼요소와 함께 업로드 4. Multi-select 폼요소를 포함한 업로드 5. 업로드된 파일로 부터 정보 얻기 6. 이미지 파일의 폭과 높이 정보 얻기 7. Database BLOB필드로 업로드 8. 다양한 Save Method들 9. 파일의 존재여부 체크 및 업로드된 파일의 삭제

파일 업로드 활용 1. 고유한 이름으로 파일 저장 2. 업로드 파일 용량 제한 3. 업로드 타임아웃 설정 4. 업로드 파일 종류 제한 5. 외국어 및 유니코드 문자셋으로된 웹페이지에서의 사용방법 6. 파일저장 없이도 업로드작업을 취소하는 방법

서버측 업로드 진행율 표시기 사용

파일 다운로드 1. 파일 다운로드 2. Database BLOB 데이터 다운로드

서버에서의 BLOB 핸들링 1. 서버에 존재하는 파일을 Database BLOB에 저장 2. Database BLOB필드를 서버내 파일로 저장

DEXTUpload 에러 처리

파일 업로드 기본

  1. 간단한 파일업로드

전송할 Form이 있는 페이지(SimpleUpload.asp)는 다음과 같은 형태로 작성된다.

[SimpleUpload.asp]

<HTML>
<BODY>
<FORM NAME="writeform" METHOD="post" ACTION="SU_Process.asp" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="file1"><BR>
<INPUT TYPE="submit" VALUE="upload">
</FORM>
</BODY>
</HTML>

Form tag에 지정된 ENCTYPE="multipart/form-data" 는 파일데이터를 포함하고 있는 폼을 전송하기 위해서 반드시 필요한 속성으로서 생략될 수 없다. 다음은 실제로 파일 업로드 등의 작업을 수행하는 페이지(SU_Process.asp)이다.

[SU_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%>
<HTML>
<BODY>
<%
Set uploadform = Server.CreateObject("DEXT.FileUpload")
uploadform.DefaultPath = "c:\temp"
uploadform.Save ' uploadform("file1").Save 라고 해도 됨.
Set uploadform = Nothing
%>
</BODY>
</HTML>

위 코드에 따라 업로드된 파일은 디폴트 경로인 "c:"에 저장된다. 디폴트 경로를 바꾸고 싶으면 개체 생성코드 다음 위치에 uploadform.DefaultPath = "c:\temp" 와 같은 코드를 넣어주면 된다. uploadform.Save는 업로드된 파일을 서버에 디스크파일 형태로 저장하는 것으로 uploadform("file1") .Save와 같다. 여기서 "file1"은 <INPUT TYPE="file" NAME="file1">에서의 NAME속성에 해당되는 이름과 같아야 한다. Save함수들에 대한 자세한 설명은 아래에 있는 "다양한 Save Method들" 장에 기술되어 있다.

※ 아래 "Multiple Upload" 예제에서 처럼 <INPUT TYPE= "file"...>항목이 여러 개일 경우, uloadform.Save, uploadform.SaveAs, uploadform.SaveVirtual, uploadform.SaveAsVirtual, uploadform.SaveAsBlob, uploadform.FileLen, uploadform.FileName, uploadform.FilePath, uploadform.MimeType 과 같은 표현은 모두 uploadform("file1").xxx 와 동일한 표현이며, 여러 개의 <<INPUT TYPE="file"...>항목 중 첫 번째 파일항목을 가리킨다.

  1. 다중파일 업로드

다음 예제는 여러 개의 파일을 동시에 업로드하는 방법을 보여주고 있다.

[MultipleUpload.asp]

<HTML>
<BODY>
<FORM NAME="writeform" METHOD="post" ACTION="MU_Process.asp" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="file1"><BR>
<INPUT TYPE="file" NAME="file2"><BR>
<INPUT TYPE="file" NAME="file3"><BR> 
<INPUT TYPE="submit" VALUE="upload"> 
</FORM> 
</BODY> 
</HTML>

[MU_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\temp" 
uploadform("file1").Save ' uploadform.Save라고 해도 됨 
uploadform("file2").Save 
uploadform("file3").Save 
Set uploadform = Nothing 
%> 
</BODY> 
</HTML>

업로드된 파일들에 대한 참조는 "file1", "file2", "file3"와 같은 NAME 속성값들을 통해서 이루어진다. 또 다른 방법으로, 여러 INPUT항목들의 NAME 속성을 동일한 값으로 지정한 다음 반복문을 이용해서 한꺼번에 저장할 수도 있다. 다음은 이를 보여주는 예제이다.

[MultipleUpload2.asp]

<HTML>
<BODY>
<FORM NAME="writeform" METHOD="post" ACTION="MU_Process2.asp" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="files"><BR>
<INPUT TYPE="file" NAME="files"><BR>
<INPUT TYPE="file" NAME="files"><BR>
<INPUT TYPE="submit" VALUE="upload">
</FORM>
</BODY>
</HTML>

[MU_Process2.asp]

<%@ LANGUAGE="VBSCRIPT"%>
<HTML>
<BODY>
<%
Set uploadform = Server.CreateObject("DEXT.FileUpload")
uploadform.DefaultPath = "c:\temp"
For i = 1 To uploadform("files").Count
uploadform("files")(i).Save
Next
Set uploadform = Nothing
%>
</BODY>
</HTML>
</HTML>

업로드된 파일들에 대한 참조는 "file1", "file2", "file3"와 같은 NAME 속성값들을 통해서 이루어진다. 또 다른 방법으로, 여러 INPUT항목들의 NAME 속성을 동일한 값으로 지정한 다음 반복문을 이용해서 한꺼번에 저장할 수도 있다. 다음은 이를 보여주는 예제이다.

위 예제에서 For문을 다음과 같이 작성해도 동일한 결과를 얻을 수 있다.

For Each item In uploadform("files")
item.Save
Next 
  1. 다른 폼요소와 함께 업로드

Form의 다른 요소들도 파일요소와 마찬가지로 NAME 속성값을 통해서 참조할 수 있다.

[UploadElements.asp]

<HTML> 
<BODY> 
<FORM NAME="writeform" METHOD="post" ACTION="UE_Process.asp" ENCTYPE="multipart/form-data"> 
<INPUT TYPE="text" NAME="title"><BR> 
<TEXTAREA NAME="content" ROWS="10" COLS="50"></TEXTAREA><BR> 
<INPUT TYPE="file" NAME="file1"><BR> 
<INPUT TYPE="submit" VALUE="upload"> 
</FORM> 
</BODY> 
</HTML>

[UE_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\temp" 
title = uploadform("title") 
content = uploadform("content")
uploadform("file1").Save 
Set uploadform = Nothing 
%> 
</BODY> 
</HTML> 
  1. Multi-select 폼요소를 포함한 업로드

DEXTUpload는 ListBox, Radio button 등과 같이 하나의 Name 속성에 대해 여러 Value값들을 가질 수 있는 Multi-select 폼 요소들을 처리할 때, Request.Form을 쓰는 것처럼 편리하게 이를 처리할 수 있다.

[UploadMultiElements.asp]

<HTML>
<BODY>
<FORM NAME="writeform" METHOD="post" ACTION="UE_Process.asp" ENCTYPE="multipart/form-data">
<H2>Select your favorite sports</H2>
<SELECT NAME="Sports" MULTIPLE>
<OPTION VALUE="Soccer">Soccer</OPTION>
<OPTION VALUE="Baseball">Baseball</OPTION>
<OPTION VALUE="basketball">Basketball</OPTION>
</SELECT><BR>
<INPUT TYPE="file" NAME="DescFile"><BR>
<INPUT TYPE="submit" VALUE="upload">
</FORM>
</BODY>
</HTML>

[UME_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%>
<HTML>
<BODY>
<%
Set uploadform = Server.CreateObject("DEXT.FileUpload")
uploadform.DefaultPath = "c:\temp"
Response.Write "Your favorite sports :<br>"

For i = 1 To uploadform("Sports").Count
Response.Write "-" & uploadform("Sports")(i) & "<br>"
Next

uploadform("DescFile").Save
Set uploadform = Nothing
%>
</BODY>
</HTML>

위 예제에서 For문을 다음과 같이 작성해도 동일한 결과를 얻을 수 있다.

For Each item In uploadform("Sports")
Response.Write "-" & item & "<br>"
Next 
  1. 업로드된 파일로 부터 정보 얻기

업로드된 파일에 대한 정보를 얻을 수 있도록 다음과 같은 Property들이 제공된다. .FileLen : 업로드된 파일의 길이 .FileName : 업로드된 파일의 이름(경로제외) .FilePath : 업로드된 파일의 전체경로 .MimeType : 업로드된 파일의 Mime Type .LastSavedFileName : 업로드되어 실제로 서버에 저장된 파일의 이름(경로제외) .LastSavedFilePath : 업로드되어 실제로 서버에 저장된 파일의 전체경로

※ .FileName과 .FilePath는 사용자가 업로드한 오리지널 파일에 대한 이름과 전체경로값을 가진다. 업로드되어 서버에 저장된 파일의 전체경로값은 .Save, .SaveAs Method 등의 리턴값으로부터 얻을 수 있다.

[Form_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "d:\upload" 
Response.Write "[Uploaded File Information] <BR>" 
Response.Write "FileName : " & uploadform("file1").FileName & "<BR>" 
Response.Write "FullPath : " & uploadform("file1").FilePath & "<BR>" 
Response.Write "FileLength : " & uploadform("file1").FileLen & " Byte(s)<BR>" 
Response.Write "MimeType : " & uploadform("file1").MimeType & "<BR>"

uploadedpath = uploadform("file1").Save 
Response.Write "UploadedPath : " & uploadedpath & "<BR>"
Response.Write "LastSavedFilePath : " & uploadform("file1").LastSavedFilePath & "<BR>"
Response.Write "LastSavedFileName : " & uploadform("file1").LastSavedFileName 
Set uploadform = Nothing 
%> 
</BODY> 
</HTML>

위 페이지가 실행된 결과는 다음과 같은 형태로 나타날 것이다.

[Uploaded File Information] FileName : sample.jpg FullPath : c:\data\sample.jpg FileLength : 176816 Byte(s) MimeType : image/pjpeg UploadedPath : d:\upload\sample.jpg LastSavedFilePath : d:\upload\sample.jpg LastSavedFileName : sample.jpg

  1. 이미지 파일(GIF/JPG/BMP)의 폭과 높이 정보 얻기

업로드된 파일이 이미지 파일(GIF/JPG/BMP)인 경우 다음과 같이 이미지의 폭과 높이 정보 등을 얻을 수 있는 추가적인 Property들이 제공된다.

.ImageFormat : 업로드된 이미지 파일의 포멧 .ImageWidth : 업로드된 이미지 파일의 폭 .ImageHeight : 업로드된 이미지 파일의 높이

[Form_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\temp" 
Response.Write "[Uploaded File Information] <BR>" 
Response.Write "FileName : " & uploadform("file1").FileName & "<BR>" 
Response.Write "FullPath : " & uploadform("file1").FilePath & "<BR>" 
Response.Write "FileLength : " & uploadform("file1").FileLen & " Byte(s)<BR>" 
Response.Write "MimeType : " & uploadform("file1").MimeType & "<BR>" 
Response.Write "ImageFormat : " & uploadform("file1").ImageFormat & "<BR>"
Response.Write "ImageWidth : " & uploadform("file1").ImageWidth & "<BR>"
Response.Write "ImageHeight : " & uploadform("file1").ImageHeight & "<BR>"

uploadedpath = uploadform("file1").Save 
Response.Write "UploadedPath : " & uploadedpath 
Set uploadform = Nothing 
%> 
</BODY> 
</HTML>

위 페이지가 실행된 결과는 다음과 같은 형태로 나타날 것이다.

[Uploaded File Information] FileName : sample.jpg FullPath : c:\data\sample.jpg FileLength : 176816 Byte(s) MimeType : image/pjpeg ImageFormat : JPG ImageWidth : 1024 ImageHeight : 768 UploadedPath : c:\temp\sample.jpg

  1. Database BLOB필드로 업로드

다음과 같이 SaveAsBlob Method를 이용하면 파일을 업로드하여 Database BLOB필드로 저장할 수 있다.

[Form_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath= "c:\temp"
Setrs=Server.CreateObject("ADODB.Recordset")rs.Open"SampleTable","DSN=SampleDSN;UID=sa;PWD=xxx;", 3, 3 
rs.AddNew 
rs("filename") = uploadform("file1").FileName 
rs("mimetype") = uploadform("file1").MimeType 
uploadform("file1").SaveAsBlob rs("filedata") 
rs.Update

rs.Close 
Set rs = Nothing 
Set uploadform = Nothing 
%> 
</BODY> 
</HTML>

※ DEXTUpload 컴포넌트가 제공하는 Database BLOB관련 Method로는 다음과 같은 것들이 있다. FileUpload 개체의 SaveAsBlob : 파일을 업로드하여 Database BLOB 필드에 저장한다. FileDownload 개체의 DownloadBlob : Database BLOB을 사용자의 디스크로 다운받아 파일로 저장한다. BLOBManager 개체의 SaveFileAsBlob : 서버에 존재하는 파일을 Database BLOB필드에 저장한다. BLOBManager 개체의 SaveBlobAsFile : Database BLOB을 서버의 디스크 파일로 저장한다.

  1. 다양한 Save Method들

DEXTUpload 컴포넌트는 업로드된 파일을 서버 파일시스템 또는 Database에 저장할 수 있는 다양한 방법을 제공.

  • 업로드된 파일과 동일한 이름의 파일로 서버에 저장하는 Method
  • Save : DefaultPath property값으로 지정된 경로에 저장
  • Save [Path지정] : 지정된 경로에 저장
  • SaveVirtual [Virtual Path지정] : 지정된 가상경로에 저장
  • 업로드된 파일과 다른 이름의 파일로 서버에 저장하는 Method
  • SaveAs [Full Path지정] : 지정된 경로와 파일명으로 저장
  • SaveAsVirtual [Full Virtual Path지정] : 지정된 가상경로와 파일명으로 저장
  • 업로드된 파일을 Database BLOB필드에 저장하는 함수
  • SaveAsBlob [ADO Field개체지정] : 지정된 Database BLOB필드에 저장

※ SaveAsBlob을 제외한 나머지 모든 Save Method들은 bOverwrite 라는 인자와 실제로 서버에 저장되는 파일에 대한 전체경로를 리턴값으로 가진다. bOverwrite 인자를 생략할 경우 기본값은 True이며 해당 경로에 같은 이름의 파일이 있을 경우 겹쳐쓰게 된다. bOverwrite 인자값을 명시적으로 False로 지정할 경우는 유일한 파일 명( filename(2).ext, filename(3).ext ... )을 구해서 저장하게 된다.

  1. 파일의 존재여부 체크 및 업로드된 파일의 삭제

DEXTUpload는 파일의 존재여부를 체크할 수 있는 FileExists 메쏘드와 업로드된 파일을 삭제할 수 있는 DeleteFile 메쏘드를 제공한다. 다음은 FileExists와 SaveAs 메쏘드를 이용하여 업로드한 파일을 서버에 고유한 파일명으로 저장하는 예제이다.

[Form_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\temp"

filename = uploadform("file1").FileName
filepath = uploadform.DefaultPath & "\" & filename

If uploadform.FileExists(filepath) Then

' Get FileName and FileExt
If InStrRev(filename, ".") <> 0 Then 
filenameonly = Left(filename, InStrRev(filename, ".") - 1) 
fileext = Mid(filename, InStrRev(filename, ".")) 
Else 
filenameonly = filename 
fileext = "" 
End If

' Get Unique FileName
i = 2
Do While (1)
filepath = uploadform.DefaultPath & "\" & filenameonly & "[" & i & "]" & fileext
If Not uploadform.FileExists(filepath) Then Exit Do 
i = i + 1
Loop 
End If

uploadform("file1").SaveAs filepath

' If you want to delete this file
' uploadform.DeleteFile filepath

Set uploadform = Nothing 
%> 
</BODY> 
</HTML>

※ DEXTUpload는 파일을 고유한 이름으로 저장할 수 있는 기능을 기본적으로 제공한다. 위 예제는 단지 DEXTUpload가 제공하는 방식이 아니라 사용자 나름대로의 방식대로 고유한 파일명을 결정하고자 할 경우의 예를 보여준 것이다.

파일 업로드 활용

  1. 고유한 이름으로 파일 저장

Save, SaveVirtual, SaveAs, SaveAsVirtual Method 는 기본적으로 업로드된 파일을 서버에 저장할 때 해당 경로에 동일한 이름의 파일이 존재할 경우 겹쳐쓰게 된다. 겹쳐쓰지 않고 유일한 파일명을 구해서 저장하고 싶으면 두 번째 인자인 bOverwrite를 명시적으로 False로 지정하면 된다. ("다양한 Save Method들" Chapter 참조)

[Form_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\temp" 
uploadedfile = uploadform.SaveAs("c:\data\sample.zip", False) 
Response.Write "uploaded file : " & uploadedfile 
Set uploadform = Nothing 
%> 
</BODY> 
</HTML>

위 예제에서 c:\data 폴더에 sample.zip이라는 파일이 이미 존재할 경우 업로드된 파일은 "c:\data\sample(2).zip"이라는 이름으로 저장되어 다음과 같은 결과 페이지를 보여주게 된다.

[ 실행결과 ] uploaded file : c:\data\sample(2).zip

  1. 업로드 파일 용량 제한

MaxFileLen property를 이용하면 업로드 가능한 최대 파일 크기를 제한할 수 있다. 만일 지정된 크기보다 큰 파일을 업로드할 경우에는 다음과 같은 오류가 발생하게 된다.

DEXTUpload error '80040200' Warning: File size must be less than 5242880 Bytes. /form_process.asp, line 27

다음 예제와 같이 FileLen property를 이용해서 최대 파일 크기를 초과하지 않는 경우에만 Save Method를 호출하게 하는 방법으로 오류발생 없이 업로드 파일크기 제한에 대한 처리를 커스터마이징 할 수도 있다.

[Form_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\temp" 
uploadform.MaxFileLen = 5242880

If uploadform("file1").FileLen > uploadform.MaxFileLen Then 
Response.Write "File size must be less than 5MBytes.<br>" 
Response.Write "Press the back button on your browser...<br>" 
Else 
uploadform("file1").Save 
End If 
Set uploadform = Nothing 
%> 
</BODY> 
</HTML> 
  1. 업로드 타임아웃 설정

일반적으로 파일 업로드 또는 Save 등과 같은 작업은 대용량 파일 업로드시 긴 시간을 요하므로 Server.ScriptTimeout(Default: 90sec)과 Session.Timeout(Default: 20min) 값을 바꾸어 주지 않을 경우 Timeout 에러로 인해 업로드 작업을 정상적으로 수행할 수 없게 된다.

DEXTUpload는 UploadTimeout property를 제공함으로써, 파일 업로드시 별도의 Server.ScriptTimeout, Session.Timeout 설정을 하지 않고도 Timeout에러 없이 대용량 파일 업로드 작업을 정상적으로 수행할 수 있다. 기본 값은 3600sec(60min)이고 필요에 따라 변경해서 사용하면 된다.

[Form_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\temp" 
uploadform.UploadTimeout = 1800

uploadform.Save 
Set uploadform = Nothing 
%> 
</BODY> 
</HTML>

위 예제에서는 UploadTimeout값을 1800sec(30min)로 설정했으므로, Save작업이 1800sec를 초과하지 않는 한 Timeout에러가 발생하지 않는다.

  1. 업로드 파일 종류 제한

DEXTUpload가 제공하는 MimeType property를 이용하면 업로드 가능한 파일의 종류를 제한할 수 있다. 다음은 GIF와 JPG 파일만 업로드할 수 있도록 하는 예제이다.

[Form_Process.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\temp"

mimetype = uploadform("file1").MimeType 
If mimetype="image/gif" or mimetype="image/pjpeg" Then 
uploadform("file1").Save 
Else 
Response.Write "Your file must be GIF or JPG...<br>" 
End If

Set uploadform = Nothing 
%> 
</BODY> 
</HTML> 
  1. 외국어 및 유니코드 문자셋으로된 웹페이지에서의 사용방법

DEXTUpload가 제공하는 CodePage property를 이용하면 외국어 및 유니코드로된 폼요소값 및 파일명의 처리가 가능하다. 다음은 유니코드 문자셋을 사용하는 웹페이지에서 DEXTUpload를 사용하는 예제이다.

[Form.asp]

<%@ LANGUAGE="VBSCRIPT"%>
<%
old_codepage = Session.CodePage
Session.CodePage = "65001"
%> 
<HTML>
<HEAD>
< META http-equiv="Content-Type" content="text/html; charset=utf-8">
</HEAD>
<BODY>

<FORM name="upform" method="post" action="form_proc.asp" enctype="multipart/form-data">
<INPUT type="text" name="title"><br>
<INPUT type="file" name="upfile"><br>
<INPUT type="submit" name="submit" value="send">
</FORM>

</BODY>
</HTML>
<%
Session.CodePage = old_codepage
%>

[Form_Proc.asp]

<%@ LANGUAGE="VBSCRIPT"%>
<%
old_codepage = Session.CodePage
Session.CodePage = "65001"
%> 
<META http-equiv="Content-Type" content="text/html; charset=utf-8" >

<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "D:\Temp"
uploadform.CodePage = 65001

Response.Write "title: " & uploadform("title") & "<BR>"
Response.Write "filename: " & uploadform("upfile").FileName
uploadform.Save

Set uploadform = Nothing
Session.CodePage = old_codepage
%> 
  1. 파일저장 없이도 업로드작업을 취소하는 방법

DEXTUpload가 제공하는 Flush method를 이용하면 실제로 파일을 서버에 저장하지 않고도 필요에 따라 업로드 작업을 완전히 취소하고 나머지 코드를 계속 실행하도록 할 수 있다. 다음은 파일 업로드시 제한된 업로드 용량을 초과할 경우 업로드를 취소하고 에러메시지를 보여주는 예제이다.

[Form_Proc.asp]

<%@ LANGUAGE="VBSCRIPT"%> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload")
uploadform.DefaultPath = "D:\Temp"

If Request.TotalBytes > 1048576 Then 
uploadform.Flush
Response.Write "Warning: File size must be less than 1 MBytes." 
Else 
uploadform.Save 
Response.Write "File-upload completed." 
End If

Set uploadform = Nothing
%> 

서버측 업로드 진행율 표시기 사용

  1. 서버측 업로드 진행율 표시기 사용

Server-side Graphical Progress Indicator를 이용하면 ActiveX Control이나 Java Applet과 같은 별도의 Client-side 소프트웨어를 다운로드 받지 않고도 단지 서버측 컴포넌트만으로 파일 업로드 진행상태를 시각적으로 보여주고, 업로드 속도, 전체 컨텐츠의 크기 및 현재 업로드된컨텐츠의 크기, 남은 시간, 현재 진행되고 있는 작업 등의 정보를 실시간으로 모니터링할 수 있다.

이 기능은 FileUploadMonitor개체를 통해서 구현되며 다음과 같은 두 개의 Method가 제공된다. UseMonitor : Form을 작성하는 페이지에서 호출되며, Progress Indicator의 모니터링 기능을 켠다. ShowMonitor : Progress Indicator를 보여주는 페이지(창)에서 호출되며, 업로드 진행상태를 시각적으로 보여준다.

[ Form 작성 페이지 (GPIUpload.asp) ]

<%@ LANGUAGE="VBSCRIPT"%> 
<% 
Set objMon = Server.CreateObject("DEXT.FileUploadMonitor") 
objMon.UseMonitor(True) 
Set objMon = Nothing 
%>

<HTML> 
<HEAD> 
<SCRIPT LANGUAGE="JavaScript"> 
<!-- 
function ShowProgress() 
{ 
strAppVersion = navigator.appVersion; 
if (document.writeform.file1.value != "") {
if (strAppVersion.indexOf('MSIE')!=-1 && 
strAppVersion.substr(strAppVersion.indexOf('MSIE')+5,1) > 4) {

winstyle = "dialogWidth=385px; dialogHeight:150px; center:yes"; 
window.showModelessDialog("show_progress.asp?nav=ie", null, winstyle); 
} 
else { 
winpos = "left=" + ((window.screen.width-380)/2)+",top="+
((window.screen.height-110)/2);<BR>winstyle="width=380,height=110,status=no,toolbar= no,menubar = no," +<br>"location=no,resizable=no,scrollbars=no,copyhistory=no," + winpos; 
window.open("show_progress.asp",null,winstyle); 
} 
}

return true; 
}

//--> 
</SCRIPT> 
</HEAD>

<BODY> 
<FORM NAME="writeform" METHOD="post" ACTION= "form_process.asp"< BR> ENCTYPE="multipart/form-data" onSubmit="return ShowProgress();">

<INPUT TYPE="file" NAME="file1"><BR> 
<INPUT TYPE="submit" VALUE="upload"> 
</FORM> 
</BODY> 
</HTML>

Progress Indicator를 사용하기 위해서는 위 예제와 같이 Form 작성 페이지 상단에서 FileUploadMonitor개체의 UseMonitor Method를 True를 인자로 해서 호출해야한다. 만일 UserMonitor Method를 호출하지 않거나 False를 인자로 해서 호출하게 되면 Progress Indicator 기능을 사용하지 않는 것으로 간주된다. 위 예제를 보면 Form을 Submit하기 직전에 ShowProgress()라는 함수를 호출하여 Progress Indicator를 시각적으로 보여주기 위해 새 창(또는 대화상자)을 띄워 주는 것을 볼 수 있다. 이 때, 새 창에서 보여지는 페이지는 다음과 같다.

[ Progress Indicator를 보여주는 페이지 (show_progress.asp) ]

<%@ EnableSessionState=False%> 
<% 
'Case of Netscape Navigator
If Request("nav") = "ns" Then 
%>
<frameset rows="80,1*" border="0" framespacing="0" frameborder="no">
<frame src="show_prog_body.asp" noresize scrolling="NO" frameborder="NO" 
name="sp_body">
<frame src="show_prog_bottom.asp" noresize scrolling="NO" frameborder="NO"
name="sp_bottom">

<%
'Case of Internet Explorer
Else
%>
<HTML>
<HEAD>
<TITLE>Uploading Files...</TITLE>
<STYLE type="text/css">
td {font-size: 9pt}
</STYLE>
</HEAD>

<BODY bgcolor="#d4d0c8" leftmargin="8" topmargin="0" scroll="no">
<IFRAME src="show_prog_body.asp" title="Progress Step1" frameborder=0 
marginheight=0 marginwidth=0 noresize scrolling=no width=365 height=65>
</IFRAME><BR><BR>

<TABLE border="0" width="365" cellpadding="2" cellspacing="0" bgcolor="#d4d0c8">
<TR><TD>Click the <B>STOP</B> button on your browser to abort uploading.</TD></TR>
</TABLE>

</BODY>
</HTML>
<%
End If
%>

Progress Indicator를 보여주기 위해서는 위에 있는 show_progress.asp와 함께 다음에 있는 show_prog_body.asp와 show_prog_bottom.asp가 필요하다.

  1. show_progress.asp: Progress Indicator를 보여주기 위해 웹페이지를 프레임으로 나눈다.
  2. show_prog_body.asp: 실제로 Progress Indicator를 보여준다.
  3. show_prog_bottom.asp: (Netscape Navigator와 같이 Inline Frame을 지원하지 않는 브라우저의 경우만 필요)

[ Progress Indicator를 보여주는 페이지 (show_prog_body.asp) ]

<%@ EnableSessionState=False%> 
<% 
Set m_objMon = Server.CreateObject("DEXT.FileUploadMonitor") 
m_objMon.ShowMonitor
Set m_objMon = Nothing
%>

[ Progress Indicator를 보여주는 페이지 (show_prog_bottom.asp) ]

<%@ EnableSessionState=False%> 
<HTML>
<HEAD>
<STYLE type="text/css">
td {font-size: 9pt }
</STYLE>
</HEAD>

<BODY bgcolor="#d4d0c8" leftmargin="8" topmargin="0" scroll="no">
<TABLE border="0" width="365" cellpadding="2" cellspacing="0" bgcolor="#d4d0c8">
<TR><TD>Click the <B>STOP</B> button on your browser to abort uploading.</TD></TR>
</TABLE>
</BODY>
</HTML>

위 ASP 페이지를 보면 "EnableSessionState" 속성을 False로 지정하여 세션상태를 해제하고 있다. 만일 이 페이지의 세션상태를 해제하지 않으면 Form의 submit 작업, 즉 파일 업로드 작업이 종료되기 전까지는 페이지의 실행된 결과를 볼 수 없게 되므로 반드시 페이지의 세션상태를 해제시켜야 한다. ShowMonitor Method는 매 순간의 업로드 진행상태를 보여주고 업로드가 완료되면 자동으로 창(또는 대화상자)을 닫는다.

[ 업로드 작업을 처리하는 페이지 (form_process.asp) ]

<%@ LANGUAGE="VBSCRIPT"%> 
<HTML> 
<BODY> 
<% 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\temp" 
uploadform("file1").Save 
Set uploadform = Nothing 
%> 
</BODY> 
</HTML>

업로드 작업을 처리하는 페이지는 Progress Indicator의 사용여부에 관계없이 동일하게 작성해 주면 된다.

파일 다운로드

  1. 파일 다운로드

FileDownload개체의 Download, DownloadVirtual Method는 서버에 있는 파일을 웹브라우저를 통해 사용자가 다운로드 있게 한다. Download : 서버의 지정된 경로에 있는 파일을 다운로드 한다. DownloadVirtual : 서버의 지정된 가상경로에 있는 파일을 다운로드 한다.

[Download.asp]

<%@ Language=VBScript %> 
<% 
Response.Buffer = False 
filepath = Request.QueryString("file") 
filename = Mid(filepath, InStrRev(filepath, "\")+1)

Response.AddHeader "Content-Disposition","attachment;filename=" & filename

set objFS =Server.CreateObject("Scripting.FileSystemObject") 
set objF = objFS.GetFile(filepath) 
Response.AddHeader "Content-Length", objF.Size 
set objF = nothing 
set objFS = nothing

Response.ContentType = "application/unknown" 
Response.CacheControl = "public"

Set objDownload = Server.CreateObject("DEXT.FileDownload") 
objDownload.Download filepath 
Set objDownload = Nothing 
%>

다운로드할 파일의 전체경로와 함께 상기 ASP페이지를 실행하면 해당 파일을 다운로드 받을 수 있게 된다. 페이지 상단을 보면 Response.Buffer = False 로 지정하여 버퍼링 없이 즉시 파일을 다운로드 받을 수 있게 했고, Content- Disposition, Content-Length, ContentType 등의 헤드정보를 지정한 후 Download Method를 호출하고 있다. 사용자는 웹브라우저에 나타나는 대화상자에 다운로드할 경로와 파일명을 지정하여 다운로드 받을 수 있다.

  1. Database BLOB 데이터 다운로드

FileDownload개체의 DownloadBlob Method는 서버에 있는 Database BLOB을 웹브라우저를 통해 사용자의 디스크 파일로 다운로드 받을 수 있게 한다. Database 관련부분을 제외하고는 Download Method와 사용법이 동일하다.

[ DownloadBlob.asp ]

<%@ Language=VBScript %> 
<%Response.Buffer= False
Setrs=Server.CreateObject("ADODB.Recordset")<br>strQuery="SELECT*FROMSampleTableWHEREid="&Request.QueryString("id")<br>rs.OpenstrQuery,"DSN=SampleDSN;UID=sa;PWD=xxx;", 3, 1

Response.AddHeader "Content-Disposition","attachment;filename=" & rs("filename") 
Response.AddHeader "Content-Length", rs("fildata").ActualSize

Response.ContentType = "application/unknown" 
Response.CacheControl = "public"

Set objDownload = Server.CreateObject("DEXT.FileDownload") 
objDownload.DownloadBlob rs("filedata") 
Set uploadform = Nothing

rs.Close 
Set rs = Nothing 
%> 

서버에서의 BLOB 핸들링 DEXTUpload는 서버 내에서의 Database BLOB 처리를 위해 BlobManager라는 개체를 추가로 제공하는데, 다음과 같은 두 개의 Method를 가지고 있다. SaveFileAsBlob : 서버에 존재하는 파일을 Database BLOB필드에 저장한다. SaveBlobAsFile : Database BLOB을 서버에 디스크 파일형태로 저장한다.

  1. 서버에 존재하는 파일을 Database BLOB에 저장

다음은 서버의 c:\data라는 폴더에 존재하는 sample.zip이라는 파일을 Database BLOB필드에 저장하는 예이다.

[ FileToBlob.asp ]

<%@ Language=VBScript %> 
<% 
Ser blobman = Server.CreateObject("DEXT.BlobManager") 
Setrs= Server.CreateObject("ADODB.Recordset")
<br>rs.Open"SampleTable","DSN=SampleDSN;UID=sa;PWD=xxx;", 3, 3

rs.AddNew 
rs("filename") = "sample.zip 
blobman.SaveFileAsBlob "c:\data\sample.zip", rs("filedata") 
rs.Update

rs.Close 
Set rs = Nothing 
Set blobman = Nothing 
%> 
  1. Database BLOB 필드를 서버내 파일로 저장

다음은 Database BLOB을 서버에 디스크 파일형태로 저장하는 예이다.

[ BlobToFile.asp ]

<%@ Language=VBScript %> 
<% 
Ser blobman = Server.CreateObject("DEXT.BlobManager")
Setrs=Server.CreateObject("ADODB.Recordset")
strQuery= "SELECT*FROMSampleTableWHEREid=100"rs.OpenstrQuery,"DSN=SampleDSN;UID=sa;PWD=xxx;", 3, 1

filename = "c:\data\" & rs("filename") 
blobman.SaveBlobAsFile rs("filedata"), filename

rs.Close 
Set rs = Nothing 
Set blobman = Nothing 
%> 

DEXTUpload 에러 처리

  1. DEXTUpload 에러 처리

DEXTUpload 컴포넌트에서 발생되는 모든 오류는 Err개체를 통해서 체크할 수 있다. 오류 발생시 컴포넌트는 그때까지 사용한 모든 리소스를 반환하고, 업로드되어 서버에 저장된 모든 파일을 자동 삭제함으로써 무결성을 보장한다. 컴포넌트와 무관하게 외부 ASP코드에서 오류가 발생했을 경우에는 FileUpload개체의 DeleteAllSavedFiles Method를 호출해서 그때까지 업로드되어 서버에 저장된 모든 파일들을 수동으로 삭제할 수 있다.

<% 
On Error Resume Next 
Set uploadform = Server.CreateObject("DEXT.FileUpload") 
uploadform.DefaultPath = "c:\data"

uploadform.Save 
If Err Then 
Response.Write "Error occured : <BR>" 
Response.Write Err.Description 
End If 
... 
' 외부 오류 발생으로 업로드 작업을 취소하고자 할 경우 
uploadform.DeleteAllSavedFiles 
... 
%> 

DEXT Upload 사용법

DEXT Upload 사용법

1 덱스트 업로드 컴포넌트를 사용하기위한 몇가지 유의 사항 2 간단한 업로드 3 다중파일 업로드 4 업로드 파일 용량 제한 5 업로드 파일을 유일한 파일이름으로 저장 6 업로드된 파일로부터 정보 얻기 7 파일 다운로드 8 DEXT vs SiteGalaxy 9 한글이 깨지는 문제

  1. 덱스트 업로드 컴포넌트를 사용하기위한 몇가지 유의 사항
  • www폴더밑의 자료실 디렉토리에는 보안상 쓰기/수정권한을 주지 않습니다. 따라서 파일을 업로드 할 때에는 www하위에 임의폴더( 예) upload )를 지정하신 후 당사 고객지원사이트에서 (http://www.Mydirect.co.kr)에서 쓰기/수정권한을 요청해주셔야합니다.

  • 덱스트 업로드 컴포넌트 메뉴얼에는 가상경로로 업로드라는 부분이 있습니다. 다이렉트에서는 절대경로를 알려드리므로 가능하시면 가상경로보다 절대경로를 이용해 주시기 바랍니다. 보다 빠르게 서비스될 수 있기 때문입니다.

  • 고객님들이 자주 문의하시는 내용은 submit을 하면 값이 넘어오지 않는다는것입니다. 그것은 DefaultPath를 설정하기 전에 값을 받는다던지 아니면 DefaultPath를 잘못 설정 했기 때문입니다. 덱스트 업로드 컴포넌트는 파일을 저장하기전에 임시파일을 만듭니다. 그 임시파일은 DefaultPath에 저장이 되는것이기 때문에 값을 받기 전에 항상 DefaultPath를 설정 하셔야 합니다.

  • 이 후에 나오는 예제들은 모두 다이렉트 실정에 맞도록 경로를 설정한 예제들 입니다.
    - www\upload 폴더는 고객님이 임의 생성 후 저희측에 쓰기/수정 권한을 요청하셔야 합니다. - www.direct.co.kr -> 고객지원 -> AS접수 ->쓰기 권한 요청 - 절대경로는 www.direct.co.kr -> 고객지원 -> 첫메뉴의 MyService의 고객정보란에서 확인이 가능합니다.

    www의 절대 경로 - D:\w000000\www upload(임의생성폴더)의 절대 경로 - D:\w000000\www\upload

  1. 간단한 업로드

사용폴더

  • ASP파일이 위치 할 폴더 : D:\w000000\www\Simple_upload
  • 업로드된 파일이 저장될 폴더(임의생성폴더) : D:\w000000\www\upload\Simple_upload

예제 소스

[Write.htm]

   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
   <Form Name="form1" Method="post"  Action="write_ok.asp"  Enctype="multipart/form-data">
    
    <Input Type="File" Name="File1">
    <Input Type="Submit" Value="업로드">
     
   </Form>
   </BODY>
   </HTML>

[Write_ok.asp]

   <%

    Response.Expires = 0
    Response.Buffer = True

    ON ERROR RESUME NEXT

    'DEXT.FileUpload 개체 생성
    Set uploadform = Server.CreateObject("DEXT.FileUpload")
    uploadform.DefaultPath = "D:\w000000\www\upload\Simple_upload"


    '또한 파일이 저장될 경로에는 쓰기 권한이 필요합니다. 
    FileName = uploadform("File1").Save 라고 해도 상관 없슴.

    If Err then
        Response.Write Err.number & "<br>" & Err.source & "<br>" & Err.description
        Set uploadform = Nothing
        Response.End
    End if

    Set uploadform = Nothing

   %>
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
    <TABLE>
        <TR>
      <td colspan="2" align="center"><b>Upload successfully!!</b></TD>
        </TR>
        <TR>
      <TD width="200">Original Path</td>
      <TD width="300"><%=uploadform.FilePath%></TD>
        </TR>
        <TR>
      <TD width="200">Upload Path</TD>
      <TD width="300"><%=FileName%></TD>
        </TR>
        <TR>
      <TD width="200">File Size</TD>
      <TD width="300"><%=uploadform.FileLen%></TD>
        </TR>
        <TR>
      <TD width="200">Mime Type</TD>
      <TD width="300"><%=uploadform.MimeType%></TD>
        </TR>
    </TABLE>
   </BODY>
   </HTML>
  1. 다중파일 업로드

사용폴더

  • ASP파일이 위치 할 폴더 : D:\w000000\www\Multiple_upload
  • 업로드된 파일이 저장될 폴더(임의생성폴더) : D:\w000000\www\upload\Multiple_upload

예제 소스

[Write.htm]

   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
   <Form Name="form1" Method="post"  Action="write_ok.asp"  Enctype="multipart/form-data">
    
    TYPE 1.<br>
    <Input Type="File" Name="File1"><br>
    <Input Type="File" Name="File2"><br>
    <Input Type="File" Name="File3"><br>
    <p>&nbsp;</p>
    TYPE 2.<br>
    <Input Type="File" Name="File"><br>
    <Input Type="File" Name="File"><br>
    <Input Type="File" Name="File"><br>
    <br>

    <Input Type="Submit" Value="업로드">
     
   </Form>
   </BODY>
   </HTML>

[Write_ok.asp]

   <%

    Response.Expires = 0
    Response.Buffer = True

    'ON ERROR RESUME NEXT

    'DEXT.FileUpload 개체 생성
    Set uploadform = Server.CreateObject("DEXT.FileUpload")
    uploadform.DefaultPath = "D:\w000000\www\upload\Multiple_upload"


    '또한 파일이 저장될 경로에는 쓰기 권한이 필요합니다. 
    'TYPE 1
    uploadform("File1").Save 
    uploadform("File2").Save 
    uploadform("File3").Save 

    'TYPE 2
    For i = 1 to uploadform("Files").Count
    
       uploadform("Files")(i).Save
 
    Next


    If Err then
        Response.Write Err.number & "<br>" & Err.source & "<br>" & Err.description
        Set uploadform = Nothing
        Response.End
    End if

    Set uploadform = Nothing

   %>
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
    <TABLE>
        <TR>
      <td colspan="2" align="center"><b>Upload successfully!!</b></TD>
        </TR>
    </TABLE>
   </BODY>
   </HTML>
  1. 업로드 파일 용량 제한 MaxFileLen property를 이용하면 업로드 가능한 최대 파일 크기를 제한할 수 있다. 만일 지정된 크기보다 큰 파일 을 업로드 할 경우에는 다음과 같은 오류가 발생하게 된다.
  DEXTUpload error '80040200'
  Warning: File size must be less than 5242880 Bytes.
  /form_process.asp, line 27

다음 예제와 같이 FileLen property를 이용해서 최대 파일 크기를 초과하지 않는 경우에만 Save Method를 호출하게 하는 방법으로 오류발생 없이 업로드 파일크기 제한에 대한 처리를 커스터마이징 할 수도 있다.

사용폴더

  • ASP파일이 위치 할 폴더 : D:\w000000\www\LimitSize
  • 업로드된 파일이 저장될 폴더(임의생성폴더) : D:\w000000\www\upload\LimitSize

예제 소스

[Write.htm]

   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
   <Form Name="form1" Method="post"  Action="write_ok.asp"  Enctype="multipart/form-data">
    
    <Input Type="File" Name="File1">
    <Input Type="Submit" Value="업로드">
     
   </Form>
   </BODY>
   </HTML>

[Write_ok.asp]

   <%

    Response.Expires = 0
    Response.Buffer = True

    'ON ERROR RESUME NEXT

    'DEXT.FileUpload 개체 생성
    Set uploadform = Server.CreateObject("DEXT.FileUpload")
    uploadform.DefaultPath = "D:\w000000\www\upload\LimitSize" 
    uploadform.MaxFileLen = 1024768

    If uploadform("file1").FileLen > uploadform.MaxFileLen Then

       Response.Write "File size must be less than 1MBytes.<br>"
       Response.Write "Press the back button on your browser...<br>"

    Else

       uploadform("File1").Save
       Response.Write "Upload successfully!!"


    End If

    Set uploadform = Nothing


   %>
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
   </BODY>
   </HTML>
  1. 업로드 파일을 유일한 파일이름으로 저장

Save, SaveVirtual, SaveAs, SaveAsVirtual Method는 기본적으로 업로드된 파일을 서버에 저장할 때 해당 경로에 동일한 이름의 파일이 존재할 경우 겹쳐쓰게 된다. 겹쳐쓰지 않고 유일한 파일명을 구해서 저장하고 싶으면 두 번 째 인자인 bOverwrite를 명시적으로 False로 지정하면 된다.

사용폴더

  • ASP파일이 위치 할 폴더 : D:\w000000\www\SaveAsUnique
  • 업로드된 파일이 저장될 폴더(임의생성폴더) : D:\w000000\SaveAsUnique

예제 소스

[Write.htm]

   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
   <Form Name="form1" Method="post"  Action="write_ok.asp"  Enctype="multipart/form-data">
    
    <Input Type="File" Name="File1">
    <Input Type="Submit" Value="업로드">
     
   </Form>
   </BODY>
   </HTML>

[Write_ok.asp]

   <%

    Response.Expires = 0
    Response.Buffer = True

    'ON ERROR RESUME NEXT

    'DEXT.FileUpload 개체 생성
    Set uploadform = Server.CreateObject("DEXT.FileUpload")
    uploadform.DefaultPath = "D:\w000000\www\upload\SaveAsUnique" 


    '또한 파일이 저장될 경로에는 쓰기 권한이 필요합니다. 
    FileName = uploadform("File1").Save( ,false)              '<============== 

    If Err then
        Response.Write Err.number & "<br>" & Err.source & "<br>" & Err.description
        Set uploadform = Nothing
        Response.End
    End if

   %>
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
    <TABLE>
        <TR>
      <td colspan="2" align="center"><b>Upload successfully!!</b></TD>
        </TR>
        <TR>
      <TD width="200">Original Path</td>
      <TD width="300"><%=uploadform.FilePath%></TD>
        </TR>
        <TR>
      <TD width="200">Upload Path</TD>
      <TD width="300"><%=FileName%></TD>
        </TR>
        <TR>
      <TD width="200">File Size</TD>
      <TD width="300"><%=uploadform.FileLen%></TD>
        </TR>
        <TR>
      <TD width="200">Mime Type</TD>
      <TD width="300"><%=uploadform.MimeType%></TD>
        </TR>
    </TABLE>
   </BODY>
   </HTML>

위 예제에서 D:\w000000\www\upload\SaveAsUnique 폴더에 sample.zip이라는 파일이 이미 존재할 경우 업로드된 파일은 "D:\w000000\www\upload\SaveAsUnique\sample(2).zip" 이라는 이름으로 저장되어 다음과 같은 결과 페이지를 보여주게 된다.

[ 실행결과 ] uploaded file : "D:\w000000\www\upload\SaveAsUnique\sample(2).zip"

  1. 업로드된 파일로부터 정보 얻기

업로드된 파일에 대한 정보를 얻을 수 있도록 다음과 같은 Property들이 제공된다.

.FileLen : 업로드된 파일의 길이 .FileName : 업로드된 파일의 이름(경로제외) .FilePath : 업로드된 파일의 전체경로 .MimeType : 업로드된 파일의 Mime Type

※ .FileName과 .FilePath는 사용자가 업로드한 오리지널 파일에 대한 이름과 전체경로값을 가진다. 업로드되어 서버에 저장된 파일의 전체경로값은 .Save, .SaveAs Method 등의 리턴값으로부터 얻을 수 있다.

사용폴더

  • ASP파일이 위치 할 폴더 : D:\w000000\www\FileInfo
  • 업로드된 파일이 저장될 폴더(임의생성폴더) : D:\w000000\www\upload\FileInfo

예제 소스

[Write.htm]

   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
   <Form Name="form1" Method="post"  Action="write_ok.asp"  Enctype="multipart/form-data">
    
    <Input Type="File" Name="File1">
    <Input Type="Submit" Value="업로드">
     
   </Form>
   </BODY>
   </HTML>

[Write_ok.asp]

   <%

    Response.Expires = 0
    Response.Buffer = True

    ON ERROR RESUME NEXT

    'DEXT.FileUpload 개체 생성
    Set uploadform = Server.CreateObject("DEXT.FileUpload")
    uploadform.DefaultPath = "D:\w000000\www\upload\FileInfo" 


    '또한 파일이 저장될 경로에는 쓰기 권한이 필요합니다. 
    FileName = uploadform("File1").Save 

    Response.Write "[Uploaded File Information] <BR>"
    Response.Write "FileName : " & uploadform("File1").FileName & "<BR>"
    Response.Write "FullPath : " & uploadform("File1").FilePath & "<BR>"
    Response.Write "FileLength : " & uploadform("File1").FileLen & " Byte(s)<BR>"
    Response.Write "MimeType : " & uploadform("File1").MimeType & "<BR>"

 

    If Err then
        Response.Write Err.number & "<br>" & Err.source & "<br>" & Err.description
        Set uploadform = Nothing
        Response.End
    End if

   %>
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
   </BODY>
   </HTML>
  1. 파일 다운로드

※ 여기서 ,"inline"이란 속성을 "attachment"라는 속성으로 바꾸어 주면 액셀파일이나 그림파일 같은 브라우저 인식 파일에 대해서도 "파일 다운로드" 대화상자가 항상 나타나도록 할 수 있습니다.

하지만, 현재 "attachment"속성이 제대로 작동하는 웹브라우저는 넷스케이프 네비게이터의 모든 버전과, 인터넷 익스플로러 5.0뿐입니다. 인터넷 익스플로러 4.01과 5.5버전에서는 "attachment"를 제대로 인식하지 못하는 웹브라우저 버그가 있습니다.

거기다, 인터넷 익스플로러 5.5 sp1의 경우는 "attachment"를 썼을 때 엉뚱하게도 download.asp를 링크하고 있는 asp파일(또는 HTML파일)의 실행결과 HTML을 다운로드 받아버리는 버그가 있습니다.

결론적으로, "파일 다운로드" 대화상자가 항상 뜨도록 하려면 "attachment" 속성을 써야 하는데, 현재 이 속성에 대한 인터넷 익스플로러 버그 문제가 있기 때문에 "attachment"는 쓰지 않는 것이 좋고, 어쩔수 없이 "inline"을 써야 합니다만, 이것을 쓰게 되면 웹브라우저 인식파일은 브라우저 상에 바로 오픈되어 나타나게 됩니다.

사용폴더

  • ASP파일이 위치 할 폴더 : D:\w000000\www\Download
  • 다운로드 받을 파일이 위치한 폴더(임의생성폴더) : D:\w000000\www\upload\Download

예제 소스

[Download.asp]

   <%

    Response.Buffer = False
    filepath = "D:\w000000\www\upload\Download\DEXTUpload Manual.zip"
    filename = "DEXTUpload Manual.zip"

    Response.AddHeader "Content-Disposition","inline;filename=" & filename

    Set objFS = Server.CreateObject("Scripting.FileSystemObject")
    Set objF = objFS.GetFile(filepath)
    Response.AddHeader "Content-Length", objF.Size
    Set objF = nothing
    Set objFS = nothing

    Response.ContentType = "application/x-msdownload"
    Response.CacheControl = "public"

    Set objDownload = Server.CreateObject("DEXT.FileDownload")
    objDownload.Download filepath
    Set uploadform = Nothing

   %>
  1. DEXT vs SiteGalaxy

다음은 덱스트 업로드를 이용한 파일 업로드와 사이트 겔럭시를 이용한 파일업로드 입니다. 아래 소스에서 주석 처리부분만 바꿔주시면 됩니다.

사용폴더

  • ASP파일이 위치 할 폴더 : D:\w000000\www\dext --> Dext라는 디렉토리를 만든다. D:\w000000\www\SiteGalaxy --> SiteGalaxy라는 디렉토리를 만든다.
  • 다운로드 받을 파일이 위치한 폴더 : D:\w000000\www\upload\DEXT D:\w000000\www\upload\SiteGalaxy

예제 소스

[Write.htm]

   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
   <Form Name="form1" Method="post"  Action="write_ok.asp"  Enctype="multipart/form-data">
    
    <Input Type="File" Name="File1">
    <Input Type="Submit" Value="업로드">
     
   </Form>
   </BODY>
   </HTML>

[Write_ok.asp]

   <%

    Response.Expires = 0
    Response.Buffer = True

    ON ERROR RESUME NEXT


'====================== DEXT 업로드를 이용한 업로드 ================================== 
    'DEXT.FileUpload 개체 생성
    Set uploadform = Server.CreateObject("DEXT.FileUpload")
    uploadform.DefaultPath = "D:\w000000\www\upload\DEXT"  

    uploadform("File1").Save
    '
'=====================================================================================


'====================== SiteGalaxy를 이용한 업로드  ================================== 

    'SiteGalaxyUpload 개체 생성
    'Set uploadform = Server.CreateObject("SiteGalaxyUpload.Form")
    'DefaultPath = "D:\w000000\www\upload\SiteGalaxy"
    'tmp_filename = uploadform("File1").FilePath
    'FileName = Mid(tmp_filename, InstrRev(tmp_filename, "\") + 1)

    'uploadform("File1").SaveAs DefaultPath & "\" & FileName

'=====================================================================================        
    
    If Err then
        Response.Write Err.number & "<br>" & Err.source & "<br>" & Err.description
        Set uploadform = Nothing
        Response.End
    End if

    Set uploadform = Nothing

   %>
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> New Document </TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">
   </HEAD>

   <BODY>
    <TABLE>
        <TR>
       <td colspan="2" align="center"><b>Upload successfully!!</b></TD>
        </TR>
   </BODY>
   </HTML>
  1. 한글이 깨지는 문제

현재 웹브라우저에서 지원하는 한국어 코드 페이지로는 한국어(EUC)/한국어(ISO)/한국어 이렇게 세가지가 있습니다. 그런데 일반적으로 사용하는 한국어(EUC)나 한국어(ISO)는 지원하는 한글의 수가 그냥 한국어(이것은 사실 KS_C_5601-1987 입니다)보다 적다는 사실입니다.

예를 들어 지금 문제가 되고 있는 "쫒"이라는 글자나 "얖"이라는 글자를 한국어(EUC)로 인코딩하면, "쫒"이라는 글자는 쫒로 "얖"이라는 글자는 얖로 나오게 됩니다. 이는 DEXTUpload를 사용하지 않고 ASP의 Request로 그냥 읽어도 마찬가지입니다. (HTML로 보여지는 웹브라우저 화면에는 글자가 제대로 나오지만 실제 소스보기를 해보면 위와 같은 값이 나옵니다.)

즉, 한국어(EUC)나 한국어(ISO) 코드 페이지를 사용하면 자주 쓰이지 않는 일부 한글문자들이 웹에서 정상적으로 처리되지 않고 위와 같이 문자코드값으로 나오는데, 이는 이들 코드체계가 외국에서 만들어진 완성형문자체계이다보니 아무래도 지원하는 글자수가 적은 듯 합니다.

반면에 우리나라에서 만들어진 한글코드체계인 한국어(KS_C_5601-1987 )는 거의 대부분의 한글이 웹에서도 제대로 처리가 되는것을 확인할 수 있었습니다.

결론적으로, 업로드 폼작성 ASP페이지에

<meta http-equiv="Content-Type" content="text/html; charset=euc-kr"> 대신
<meta http-equiv="Content-Type" content="text/html; charset=ks_c_5601-1987">

를 사용해 보면(업로드 처리 페이지는 어떤 코드체계를 갖건 상관없습니다.) 글자가 깨지지 않고 정상적으로 처리되는 것을 보실 수 있을 것입니다.

평점을 남겨주세요
평점 : 2.5
총 투표수 : 1