개요: 브라우저/서버 기반 응용 프로그램 환경에서 브라우저에 다양한 유형의 파일을 업로드하는 것은 항상 사용자의 파일 관리 응용 프로그램을 괴롭히는 문제 중 하나였습니다. HTTP에 파일을 업로드하는 메커니즘에는 RFC1867, PUT 및 WebDAV의 세 가지 메커니즘이 있습니다. 일반적인 구현 방법은 RFC1867에 도입된 새로운 유형인 파일 및 ADO 스트림 개체를 사용하는 것입니다. 이 문서에서는 위의 업로드 방법과 구현 원칙을 논의하고 구체적인 솔루션 예를 제공합니다.
키워드: ASP 구성 요소 FILE 개체
현재 브라우저/서버 모델을 기반으로 하는 응용 프로그램이 더 널리 사용됩니다. 사용자가 서버에 파일을 전송해야 할 때 일반적인 방법 중 하나는 FTP 서버를 실행하고 각 사용자의 FTP 기본 디렉터리를 사용자의 웹 홈 디렉터리로 설정하여 사용자가 FTP 클라이언트 프로그램을 실행하고 파일을 업로드할 수 있도록 하는 것입니다. 지정된 웹 디렉토리. 이를 위해서는 사용자가 FTP 클라이언트 프로그램을 사용하는 방법을 알아야 합니다. 따라서 이 솔루션은 FTP에 익숙한 숙련된 사용자에게만 적합합니다. 파일 업로드 기능을 웹과 통합하여 사용자가 웹 브라우저만 사용하여 업로드 작업을 완료할 수 있다면 매우 편리할 것입니다. 그러나 File System Object는 텍스트 파일만 전송할 수 있다는 한계로 인해 ASP의 가장 큰 문제는 파일 업로드입니다. 다음은 HTTP 프로토콜을 기반으로 웹 페이지에 파일을 업로드하는 방법을 설명합니다.
하나. HTTP를 통한 업로드를 위한 세 가지 메커니즘
HTTP를 통한 업로드에는 RFC1867, PUT 및 WebDAV의 세 가지 메커니즘이 있습니다.
PUT은 HTTP 1.1에 도입된 새로운 HTTP 동사입니다. 웹 서버는 HTTP PUT과 객체 이름을 수신하면 사용자를 인증하고 HTTP 스트림의 콘텐츠를 수신하여 웹 서버에 직접 저장합니다. 이는 웹 사이트에 지장을 줄 수 있기 때문에 HTTP의 가장 큰 장점인 서버 프로그래밍 가능성도 잃게 됩니다. PUT의 경우 서버가 요청 자체를 처리하므로 CGI나 ASP 응용 프로그램이 개입할 여지가 없습니다. 애플리케이션이 PUT을 캡처하는 유일한 방법은 낮은 수준인 ISAPI 필터링 계층에서 작동하는 것입니다. 이에 상응하는 이유로 PUT의 적용은 매우 제한적입니다.
WebDAV는 웹 콘텐츠의 분산 인증 및 번역을 허용합니다. HTTP를 통한 웹 콘텐츠 업로드, 잠금/잠금 해제, 체크인/체크를 허용하는 몇 가지 새로운 HTTP 동사를 소개합니다. Office 2000의 "웹에 저장"은 WebDAV를 통해 구현됩니다. 콘텐츠 업로드에만 관심이 있다면 WebDAV는 훌륭하게 작동하며 많은 문제를 해결합니다. 그러나 웹 애플리케이션 내에서 파일을 업로드해야 하는 경우 WebDAV는 아무 소용이 없습니다. HTTP PUT과 마찬가지로 이러한 WebDAV 동사는 웹 애플리케이션이 아닌 서버에 의해 해석됩니다. WebDAV의 이러한 동사에 액세스하고 응용 프로그램의 콘텐츠를 해석하려면 ISAPI 필터링 계층에서 작업해야 합니다.
RFC1867( http://www.ietf.org/rfc/rfc1867.txt )은 W3C에서 HTML3.2로 최종 승인되기 전에 제안된 표준으로 사용되었습니다. 매우 간단하지만 강력한 아이디어입니다. 양식 필드에 새 유형을 정의하는 것입니다.
<INPUT TYPE="FILE">
그리고 일반적인
<FORM ACTION="formproc.asp" METHOD="POST">를
사용하는 대신
<FORM ACTION="formproc .asp"를
사용하여 양식 자체에 다른 인코딩 체계를 추가했습니다." METHOD="POST" ENCTYPE="multipart/form-data">
이 인코딩 방식은 대량의 데이터를 전송할 때 기본 "application/x-url-encoded" 형식 인코딩 방식보다 훨씬 더 효율적입니다. URL 인코딩에는 매우 제한된 문자 세트만 있습니다. 문자 세트를 초과하는 모든 문자는 '%nn'으로 대체되어야 합니다. 여기서 nn은 해당하는 2개의 16진수 숫자를 나타냅니다. 예를 들어 일반 공백 문자라도 '%20'으로 바꿔야 합니다. 반면에 RFC1867은 전자 메일 메시지에서 흔히 볼 수 있는 다중 부분 MIME 인코딩을 사용하여 인코딩 없이 대량의 데이터를 전송하지만 데이터 주변에 몇 가지 간단하지만 유용한 헤더만 사용합니다. 주요 브라우저 제조업체는 권장되는 "찾아보기..." 버튼을 채택했으며 사용자는 로컬 "파일 열기..." 대화 상자를 사용하여 업로드할 파일을 쉽게 선택할 수 있습니다.
RFC1867은 여전히 웹 애플리케이션에 파일을 업로드하는 유연한 방법의 대부분을 남겨두고 있습니다. PUT은 사용이 매우 제한되어 있습니다. WebDAV는 FrontPage 사용자와 같은 콘텐츠 작성자에게 유용하지만 파일 업로드를 웹 응용 프로그램에 통합하려는 웹 개발자에게는 덜 유용합니다. 따라서 RFC1867은 웹 애플리케이션에 파일 업로드를 포함하는 가장 좋은 방법입니다.
실제 응용 프로그램에서 Microsoft는 Posting Acceptor를 무료로 제공합니다. ASP는 "multipart/form-data" 인코딩 체계를 이해하지 못합니다. 대신 Microsoft는 업로드가 완료된 후 ASP 페이지에 대한 REPOST를 허용하는 ISAPI 응용 프로그램인 Posting Acceptor를 제공합니다.
Software Artisans의 SA-FileUp은 최초의 상용 Active Server 구성 요소 중 하나였습니다. 여러 가지 개선을 거쳐 이제는 순수한 ASP 구성 요소로 존재합니다.
둘. ASP 기반 파일 업로드 구현 원리 분석의
기본 원칙은 ADO Stream 개체의 BinaryRead 메서드를 사용하여 FORM의 모든 데이터를 읽고 필요한 파일 데이터를 가로채서 바이너리 파일로 저장하는 것입니다.
다음은 파일 업로드 페이지(upload.htm)의 예입니다:
<html>
<본문>
<form name="업로드" Method="게시물" Enctype="multipart/form-data" Action="Upload.asp">
<입력 유형="파일" 이름="파일 이름">
<INPUT TYPE="제출" VALUE="업로드"></TD>
</form>
</body>
</html>
파일 개체는 프로그램에서 사용되므로 Upload.asp에서 BinaryRead 메서드를 사용하여 읽은 원본 데이터에는 선택한 파일 자체의 데이터일 뿐만 아니라 파일의 경로, 유형 및 제출도 포함됩니다. 사용자의 하드 디스크에 있는 도메인 이름 및 페이지의 기타 관련 정보에 대한 설명이므로 파일의 특정 내용을 추출해야 합니다. 분석에 따르면 헤더 정보와 데이터 사이의 구분선은 두 쌍의 캐리지 리턴과 라인 피드이며, 마지막에는 다음과 유사한 방법을 사용하여 파일 데이터를 얻을 수 있습니다.
희미한 FormData.FormSize,DataStart,CLStr,DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
'4는 캐리지 리턴 및 줄 바꿈 문자 두 쌍의 길이입니다.
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData는 파일의 내용입니다.
필요에 따라 해당 처리를 수행할 수 있습니다. 마지막으로 할 일은 파일을 저장하는 것입니다. 저장하는 방법은 두 가지가 있는데, 하나는 VB나 VC 등의 프로그램에서 바이너리 파일 연산 방식을 사용하고, 프로젝트에 적절한 타입 라이브러리를 추가한 뒤 최종적으로 DLL 파일로 컴파일한 후, 사용 시 DLL 파일을 등록하는 것이다. 그것. . 파일 저장 절차는 다음과 같습니다.
Public Function SaveFile(Pathname As String) As String
Dim objContext As ObjectContext
Dim objRequest를 요청으로 사용
objContext=GetObjectContext() 설정
objRequest=objContext("요청") 설정
'다음 코드 조각은 파일 저장 작업과 관련되어 있습니다. Dim FormData() As Byte, CLStr, DivStr
데이터 시작을 길게, 데이터 크기를 길게
DataSize=objRequest.TotalBytes
Redim FormData(DataSize-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) & ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
'바이너리 파일을 생성하고 여기에 FormData를 씁니다. Open Pathname For Binary As 1
#1,,FormData를 입력하세요.
#1 닫기
저장파일="알았어!"
End Function의
은 ADO STREAM에서 제공하는 바이너리 파일 작업 방법을 사용하는 것입니다. 파일을 저장하는 문은 StreamOBJ.SaveToFile(fileName,2)입니다. 이런 종류의 작업에서는 관련 작업을 클래스 파일에 저장할 수 있으며, 이를 적용할 때 클래스 파일을 ASP 프로그램에 직접 포함시키면 됩니다. 구체적인 처리 방법은 관련 소개를 참조하세요.
삼. 파일 업로드 구현 방법 인스턴스는
구성 요소 또는 구성 요소 없는 방법을 사용하여 파일 업로드를 구현할 수 있습니다. 예를 들어 구성 요소 범주의 경우 Microsoft Posting Acceptor(줄여서 MPA)는 Microsoft에서 출시한 무료 서버 구성 요소이며 이러한 유형의 구성 요소를 설치하는 것도 비교적 편리합니다. Microsoft mpa의 경우 설치 파일을 실행하면 됩니다. 일반 dll 구성 요소의 경우 등록이 필요합니다. 예를 들어 aspcnUP.dll을 사용하려면 Window 2000에서 regsvr32 [path]aspcnUP.dll만 실행하면 됩니다. 그러면 시스템에서 등록 성공 메시지를 표시하고 구성 요소가 없는 클래스에 대해 구성 요소를 사용할 수 있습니다. www.5xsoft.com 의 구성요소 업로드 class-upload_5xsoft와 같은 것입니다. 이를 사용할 때 처리기에 다음 문을 포함하면 됩니다.
<!--#include FILE="upload.inc"-->
업로드 객체 생성
과 관련된 속성 및 동작 방법은
본 컴포넌트의 사용설명서를 참조하시기 바랍니다.다음은 aspcnUP.dll 구성 요소를 예로 들어 일부 유형의 파일(upload.asp)을 업로드하기 위한 소스 코드입니다.
<% @ 언어="vbscript"
fileUP=Server.CreateObject("aspcn.Upload") 설정
파일UP.Maxsize=200000
fileUP.Path="d:upfile"
파일업.업로드
i=0에서 fileUP.Count까지
필드 이름=fileUP.FieldName(i)
fileUP.FileType(fieldname)="zip" 또는 ileUP.FileType(fieldname)="rar" 인 경우
fileUP.저장 필드 이름
종료 조건
다음
fileUP=아무것도 설정하지 않음
%>
4. 결론
Microsoft가 새로 출시한 ASP에서는 브라우저/서버 응용 프로그램 모델이 여전히 빠르게 발전하고 있습니다. NET에는 파일 업로드 기능이 내장되어 있어 사용이 매우 간단하고 편리합니다. 새로운 기술인 ASP. NET은 단순한 ASP 업그레이드가 아니라 많은 새로운 기능을 포함하는 웹 개발을 위한 완전히 새로운 프레임워크입니다. ASP. NET에서는 더 쉽게 작성하고 더 명확한 구조를 가진 코드를 제공하므로 이러한 코드를 사용하면 더 쉽게 재사용하고 공유할 수 있어 더욱 실용적인 프로그램을 개발할 수 있습니다.