Computer/ASP

펌) dext업로드 컴포넌트에 대해서..

알찬돌삐 2011. 11. 29. 09:47
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

2. 간단한 업로드
 사용폴더 
  - 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>
 
3. 다중파일 업로드
 사용폴더 
  - 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>
 
4. 업로드 파일 용량 제한
 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>

5. 업로드 파일을 유일한 파일이름으로 저장
 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"
 
6. 업로드된 파일로부터 정보 얻기
 업로드된 파일에 대한 정보를 얻을 수 있도록 다음과 같은 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>
 
7. 파일 다운로드
 ※ 여기서 ,"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
   %>
 
8. 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>
   
 
9. 한글이 깨지는 문제
 현재 웹브라우저에서 지원하는 한국어 코드 페이지로는 한국어(EUC)/한국어(ISO)/한국어 
 이렇게 세가지가 있습니다. 그런데 일반적으로 사용하는 한국어(EUC)나 한국어(ISO)는 
 지원하는 한글의 수가 그냥 한국어(이것은 사실 KS_C_5601-1987 입니다)보다 적다는 사실입니다. 
  
 예를 들어 지금 문제가 되고 있는 "쫒"이라는 글자나 "얖"이라는 글자를 한국어(EUC)로 인코딩하면, 
 "쫒"이라는 글자는 &#51922;로 "얖"이라는 글자는 &#50582;로 나오게 됩니다. 
 이는 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">
 를 사용해 보면(업로드 처리 페이지는 어떤 코드체계를 갖건 상관없습니다.) 글자가
 깨지지 않고 정상적으로 처리되는 것을 보실 수 있을 것입니다.


출처 http://blog.naver.com/dadaul/40004157401.

'Computer > ASP' 카테고리의 다른 글

펌) 페이징 쿼리문 비교  (0) 2011.11.29
펌) ASP 성능 향상 TIP.  (0) 2011.11.29
펌) asp에서 디비작업 최적화하기  (0) 2011.11.29
ASP CDONTS 메일 발송  (0) 2011.11.29
CDO 객체를 이용한 메일발송 ASP 예제  (0) 2011.11.29