반응형
▒ 간단한 파일업로드 | ||||
전송할 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" 는 파일데이터<input type= "file">를 포함하고 있는 폼을 전송하기 위해서 반드시 필요한 속성으로서 생략될 수 없다. 다음은 실제로 파일 업로드 등의 작업을 수행하는 페이지(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"...>항목 중 첫 번째 파일항목을 가리킨다. | ||||
▒ 다중파일 업로드 | ||||
다음 예제는 여러 개의 파일을 동시에 업로드하는 방법을 보여주고 있다. | ||||
[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 | ||||
▒ 다른 폼요소와 함께 업로드 | ||||
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> | ||||
▒ 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 | ||||
▒ 업로드된 파일로 부터 정보 얻기 | ||||
업로드된 파일에 대한 정보를 얻을 수 있도록 다음과 같은 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 | ||||
▒ 이미지 파일(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 | ||||
▒ 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을 서버의 디스크 파일로 저장한다. | ||||
▒ 다양한 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 ... )을 구해서 저장하게 된다. | ||||
▒ 파일의 존재여부 체크 및 업로드된 파일의 삭제 | ||||
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가 제공하는 방식이 아니라 사용자 나름대로의 방식대로 고유한 파일명을 결정하고자 할 경우의 예를 보여준 것이다. | ||||
파일 업로드 활용 | ||||
▒ 고유한 이름으로 파일 저장 | ||||
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 | ||||
▒ 업로드 파일 용량 제한 | ||||
MaxFileLen property를 이용하면 업로드 가능한 최대 파일 크기를 제한할 수 있다. 만일 지정된 크기보다 큰 파일을 업로드할 경우에는 다음과 같은 오류가 발생하게 된다. DEXTUpload error ' 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> | ||||
▒ 업로드 타임아웃 설정 | ||||
일반적으로 파일 업로드 또는 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에러가 발생하지 않는다. | ||||
▒ 업로드 파일 종류 제한 | ||||
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> | ||||
▒ 외국어 및 유니코드 문자셋으로된 웹페이지에서의 사용방법 | ||||
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 %> | ||||
▒ 파일저장 없이도 업로드작업을 취소하는 방법 | ||||
DEXTUpload가 제공하는 Flush method를 이용하면 실제로 파일을 서버에 저장하지 않고도 필요에 따라 업로드 작업을 완전히 취소하고 나머지 코드를 계속 실행하도록 할 수 있다. 다음은 파일 업로드시 제한된 업로드 용량을 초과할 경우 업로드를 취소하고 에러메시지를 보여주는 예제이다. | ||||
[Form_Proc.asp] 이미지만 업로드 하게 .. 함수 화.. 이미지 체크함수(덱스트 사용시)
요건 덱스트 업로드!
출처 http://www.songtory.com/post/001001/2/90 |
반응형
':::: 개발 :::: > ::: A S P :::' 카테고리의 다른 글
클릭 한것 체크 쿠키에 저장하기 (0) | 2014.12.10 |
---|---|
asp 모든 세션 루프로 출력하기 (0) | 2014.12.01 |
JSP Split 메소드 이용 하여 문자 자르기 트 (0) | 2010.06.22 |
[본문스크랩] [Ajax] ASP와 연동하여 우편번호 검색하기 (0) | 2009.12.28 |
[본문스크랩] [Ajax]간단한 팝업메뉴 비동기 호출하기 (0) | 2009.12.28 |
[본문스크랩] ASP 내장함수 (0) | 2009.12.28 |
[본문스크랩] Formatcurrency (0) | 2009.12.28 |
[본문스크랩] Request와 Response 객체 활용 (1) | 2009.12.28 |