관리 메뉴

I LOVE EJ

ABC UPLOAD 컴포넌트 본문

Web Development/APS

ABC UPLOAD 컴포넌트

BeOne 2009. 1. 6. 20:50
사용법이 ABC처럼 쉽다는 뜻인데...요즘 대부분 호스팅업체에서 지원하고 있다a
다운로드 사이트 : http://www.websupergoo.com

1.

C:\component 에 컴포넌트를 다운 받고 받으면 디폴트로 c:\program files 에 설치된다 (물론 컴포넌트 서버등록 과정이 자동으로 이루어진다)
2. 만약 구버전인 abcupload.dll 을 구한 사람은 아래 처럼 직접 서버등록 과정을 거쳐야 한다
  1) 만약 컴포넌트를 c:\component 라는 폴더에 다운 받았다면

2) regsvr32 로 ABCUPLOAD4.DLL 을 서버에 등록한다.
시작>실행 regsvr32 c:\component\AbcUpload.dll

 *등록취소는
시작>실행 regsvr32 /u c:\component\AbcUpload.dll
* windows2000서버에서 안정적으로 작동하며, abcupload4x버전은 30일 평가판이다

  ※ 업로드 이야기
1. 업로드는 클라이언트의 피시에 있는 파일을 서버의 지정된 폴더에 올리는 걸 얘기한다. 파일을 서버로 올리는 FTP와 다른 점은 응용프로그램과 연동하여 파일을 다룰 수 있다는 점이다. 응용프로그램에서 업로드로 올린파일은 그 응용프로그램에서 다른 데이타 항목과 함께 파일이 이용될 수 있는 것이다

FTP는 주로 홈페이지관리자가 웹문서를 서버에 올릴 때 사용하고 업로드는 파일이 필요한 응용프로그램 즉, 자료실, 이미지가 있는 컬럼게시판, 앨범게시판, 쇼핑몰에서 사용된다
2.   기존의 폼전송에서 파일이 추가되면 폼태그 속성에 enctype="multipart/form-data" 를 추가하여야 한다 . 이는 파일의 내용을 전송할 수 있도록 준비된 속성이다. 물론 파일이 없는 경우는 디폴트 enctype이 적용되는 데 보통 생략하고 사용한다. 이는 몰라도 아무 상관이 없다.
3.   ASP에서 FORM 태그를 이용한 전송시 첨부화일이 있으면 기존의 전송에 사용하던
REQUEST객체의 FORM 컬랙션을 이용할 수 없게된다. 이건 REQUEST객체의 설계가 그렇게 되어 있기 때문이다. 이럴 경우

업로드 컴포넌트의 객체를 이용하여 첨부파일을 전송받아야한다. 뿐만아니라 multipart/form-data 에서는 파일이 아닌 일반 택스트도 컴포넌트 객체를 이용하여 전송받아야 한다.
4. 업로드된 파일은 디비에 바로 저장하는 방법도 있지만 그보다는 물리적 폴더에 저장하고 파일의 이름만(!) 디비에 저장하여 필요시 디비의 파일이름을 가져와서 저장한 폴더에서 찾아 사용한다.

:: abcUP.ASP ::

업로드 예제
이름
첨부1
첨부2
  



아래 예제는 get 방식의 idx 와 첨부 파일이 있는 enctype="multipart/form-data" 환경에서의 일반 택스트인 sname, 첨부 파일인 file1,file2의 3가지 종류의 전송을 어떻게 처리하는지를 살펴보는 것이다. 실제 사용시 일어날 수 있는 사례가 될 것이다.
abcUP.ASP

<table width="500" border="1" cellspacing="0" cellpadding="0">

<form method="post" action="abcup_ok.asp?idx=30" enctype="multipart/form-data">

<tr align="center">
<td colspan="2" height="25">업로드 예제</td>
</tr>

<tr>
<td width="60" align="center">이름</td>
<td width="440"> <input type="text" name="sname"> </td>
</tr>

<tr>
<td align="center">첨부1</td>
<td> <input type="file" name="file1" size="45"> </td>
</tr>

<tr>
<td align="center">첨부2</td>
<td> <input type="file" name="file2" size="45"> </td>
</tr>

<tr>
<td colspan="2" align="center">
<input type="submit" value=" 등 록 " ></td>
</tr>

</form>

</table>

:: ABCUP_OK.ASP ::


<%
' get 방식 전송은 기존의 request.querystring으로 전송을 받는다

idx = request.querystring("idx")


'XFORM객체를 생성하고 전송받는다(버전에 따라 ProgID가 다르다)
Set theForm = Server.CreateObject("ABCUpload.XForm")
'Set theForm = Server.CreateObject("ABCUpload4.XForm")

'* 파일이 아닌 폼전송 받기
(request.form 사용 안됨)
sname=theForm(trim("sname"))


'최대업로드용량
theForm.MaxUploadSize = 1024000 '1메가(디폴트는 8메가)
'물리적 경로를 사용한다
theForm.AbsolutePath = True
'덮어쓰기를 허용한다
theForm.Overwrite = true

'* 파일인 경우 전송 처리 방법

1 단계 : 먼저 전송된 파일의 정보를 얻을 수 있는 하위객체인 xfield 객체를 생성한다
2 단계 : 이 객체의 프로퍼티를 이용하여 업로드된 파일이 있는지 알아본다
3 단계 : 업로드된 파일이 있는 경우는 파일이름을 구하고 서버의 저장할 장소에 저장할 파일이름으로 저장한다


'XFIELD객체를 생성하고 업된 파일의 정보를 얻고 저장한다
'(1)은 인덱스로 폼요소 file이 같은 name일경우 (1),(2)..로 전송을 처리할 수 있다
Set theField = theForm(trim("file1"))(1)
'업로드된 파일이 있으면 저장한다
If theField.FileExists Then
fname1= theField.RawFileName '전송된 파일이름
theField.Save "d:\abcup\upfiles\" & fname1 '경로와 폴더를 정확하게
end if

'XFIELD객체를 생성하고 업된 파일의 정보를 얻고 저장한다
Set theField = theForm(trim("file2"))(1)
'업로드된 파일이 있으면 저장한다
If theField.FileExists Then
fname2= theField.RawFileName '전송된 파일이름
theField.Save "d:\abcup\upfiles\" & fname2 '경로와 폴더를 정확하게
end if
%>
<br>
idx : <%=idx%> <br>
이름 : <%=sname%> <br>
파일1 : <%=fname1%> <br>
파일2 : <%=fname2%> <br>

* 경로는 server.mappath를 쓰면 더욱 깔끔!
* 전송된 파일이름은 마음대로 변경이 가능하다

fname1="logo.gif" 처럼 원래이름을 사용하지 않아도 된다
fname1="1" & theField.RawFileName 처럼 변경을 해도 된다



ABC업로드 컴포넌트가 가진 객체, 메서드, 속성은 다음과 같다.

XFORM OBJECT

XFORM객체는 multipart format 엔코딩에서 Request.Form을 대신한다.
This object is an upload capable replacement for the standard Microsoft
Request.Form object. It handles forms encoded in multipart format as
defined in RFC 1867.

Method Description
Read Read in raw uploaded data from a file.
Save Save the raw uploaded data.
SetUser Impersonate a different user.

Property Default Description
Item Yes A set of fields referenced by name or number.
Count No The number of field sets available.
ID No The form unique ID.
AbsolutePath No Whether to use absolute or virtual paths.
Overwrite No Whether to overwrite existing files.
MaxUploadSize No The maximum size of uploads to allow.
User No The current identity being used by ABCUpload.
Domain No The domain which the user belongs to.
CodePage No The character set codepage to use.
Multipart No Whether multipart data was submitted.
Streams No Whether to use NTFS streams.



XFIELD OBJECT

HTML FORM전송을 통해 업로드된 파일 속성을 알 수 있고, 저장할 수 있다.
This object represents the data uploaded within a particular HTML form field.
It allows you to examine the data (e.g. to determine if a file was uploaded)
and perform operations on it (e.g. save the data to disk).

Method Description
Save Allows you to save the contents of a field. * 저장하는 메서드

Property Default Description
Name No The name of the HTML field.
Content Yes The content of the field as a string.
Length No The size of the data held in the field. * 파일사이즈
FileExists No If a file was uploaded. * 업로드되었는지
FileName No The URL safe uploaded filename.
FileType No The inferred file name extension of the file.
MIMEType No The MIME type of the uploaded file. * 마임타입
MacBinary No If the file was encoded as MacBinary.
SafeFileName No The Windows safe filename.
RawFileName No The uploaded filename. * 파일이름 구하기
RawFileType No The file name extension of the file.
RawFilePath No The uploaded filepath.
Data No The data within the uploaded file.
Resource No The resource data within the uploaded file.
RawData No The raw uploaded file data.
RawLength No The raw uploaded file length.
ImageType No The type of image file uploaded.* 이미지파일종류
ImageWidth No The width of image file uploaded.* 이미지 넓이
ImageHeight No The height of image file uploaded.* 이미지 높이



출처 : http://www.dragoneye.co.kr/