브라우저에서 파일을 만드는 것은 클라이언트에서 서버로 파일을 전달하는 간단한 방법입니다. 세 번째 -세대 브라우저 Netscape 및 Microsoft에서 대부분의 브라우저는 사용자에게 특수 액세스 방법이나 소프트웨어를 제공 할 필요없이 서버에서 파일을 업로드 할 수 있습니다.
일부 ASP 구성 요소는 파일 용으로 설계되었습니다 (예 : ::
수용자 게시
(Microsoft Siteserver의 일부),
aspsmartupload (advantys),
aspupload (persisssoftware),
SA-Fileupsoftware Artisants)
이 기사의 시작 부분에서는 이러한 구성 요소 생성에 대한 정보를 알려주고 이러한 구성 요소는 일반적으로 VB, C ++ 또는 Java를 사용합니다.
이러한 구성 요소의 문제는 표준 ASP가 아닌 제 3 자 제품의 일부라는 것입니다. 세 번째 파티 구성 요소로서 서버에 설치를 설치해야합니다. 이는 DLL이 서버에 복사 및 등록되어야 함을 의미합니다. 대부분의 호스팅 시스템은 구성 문제 (특히 가상 호스트)가 발생할 수 있으므로 서버에서 이러한 설정을 수행 할 수 없습니다. 두 번째 단점은 대부분 소스 코드를 제공하지 않으면 필요에 따라 사용자 정의 할 수 없다는 것입니다.
따라서 파일 업로드 문제를 해결하려면 vbscript 코드를 작성해야합니다. vbscript는 변형 데이터 유형 만 사용할 수있는 스크립트 언어이며 이진 데이터 및 바이트 배열 관리 기능을 제공 할 수없는 스크립트 언어이기 때문에 불가피한 선택이 아닙니다.
업로드 프로세스를 이해하려면 먼저 데이터가 HTTP 프로토콜을 사용하여 브라우저에서 서버로 전송된다는 것을 알아야합니다. 이는 "Multipart/Form-Data"(다중 부문/형식 데이터)의 양식 제출이 제출되었음을 의미합니다.
양식을 업로드하십시오
정상적인 상황에서는 HTML 양식을 사용하여 브라우저에서 서버로 데이터를 전달하십시오. 이 양식에는 텍스트 도메인, 검사 상자, 버튼 및 업로드 된 파일의 파일 유형 컨트롤이 포함될 수 있습니다. 사용자는이 테이블을 자신의 데이터로 서버에 채우고 제출합니다.
테이블 요소의 enableype 속성은 서버에 인코딩 된 테이블 데이터 세트로 인코딩 된 컨텐츠 유형을 지정합니다. ENCTYPE 속성의 기본값은 "Application/X-WWW-Form-urlencoded"이지만 ASCII 문자가 아닌 문자 또는 이진 번호가있는 데이터를 포함하여 많은 양의 텍스트를 서버로 전송할 때이 기본 유형은 유능 할 수 없습니다. 현재 파일이 양식을 업로드 할 때 "Multipart/Form-Data"컨텐츠 유형을 사용해야합니다.
"Multipart/Form-Data"정보에는 일련의 구성 요소가 포함됩니다.
컨텐츠 분열 헤드, "Form-Data"의 값;
파일 유형 컨트롤의 경우 한 부분이 추가 정보가 포함될 수 있습니다.
Filename (파일 이름) 원본 경로 및 파일 이름의 속성은 이진 데이터 제어 (Content-Type) 헤더에 의해 제어되는 연결된 데이터에 규정되어 있습니다.
이 헤드 뒤의 제어 바이너리 또는 텍스트 내용을 따르십시오.
다음 예제는 "멀티 파트/폼 데이터"의 인코딩을 보여줍니다.
이 양식이 제출되면 서버 에서이 요청을 읽을 수 있습니다.
------------------------------ 7CF87224D2020A
내용화 : 형태-데이터; "이메일"
[이메일 보호]
------------------------------ 7CF87224D2020A
내용화 : 형태-데이터; "blob";
내용 유형 : 이미지/pjpeg
------------------------------ 7CF87224D2020A
내용화 : 형태-데이터; "Enter"
쿼리를 제출하십시오
---------------------------- 7CF87224D2020A--
해당 콘텐츠가 클라이언트에 대한 응답으로 전송되면 표시됩니다. request.binaryread 및 response.binarywrite 메소드 이진 데이터를 읽고 씁니다.
< / %
response.binaryWrite (request.binaryread (request.totalBytes))
%>
응답의 각 부분의 분할을 볼 수 있습니다.
------------------------------ 7CF87224D2020A
마지막 경계선은 ' -'를 따릅니다.
각 컨트롤에는 내용화가 있습니다. 이름 속성 인식은 HTML 테이블 (이메일, blob 및 enther에 의해 제어됩니다. 파일 유형 컨트롤 (Blob)의 경우
파일 이름은 또한 헤드 방위 헤더의 일부이며 컨텐츠 유형 헤더는 내용 유형의 이진 데이터를 제공합니다.
업로드 된 스크립트
위의 모든 내용은 연결되어야합니다. 이를위한 많은 객체와 방법이 있기 때문에 VB 또는 C ++에서는 매우 분명합니다. vbscript에서는 언어가 제공하는 일부 기능을 사용해야하며 VBScript에 사용되는 이중 인코딩 인코딩 변수 문자열의 문제를 해결해야합니다.
vbscript 함수
원래 데이터는 이진 형식이므로 이진 데이터를 관리하도록 설계된 vbscript 기능을 사용해야합니다. 원래 데이터를 바이트 문자열로 간주하기 때문에 MIDB, InstrB 및 LENB 기능이 유용합니다. 그러나 vbscript의 클래식 문자열은 듀얼 -Byte- 인코딩 된 문자열이므로 단일 바이트로 분해하기에 적합하지 않기 때문입니다.
이것들은 vbscript 함수에서 바이트를 분해하는 데 사용되는 유일한 기능입니다. 또한 vbscript 인코딩에서 문자열을 사용할 수 있도록 분해 된 데이터에서 듀얼 비트 인코딩 문자열을 얻는 방법도 필요합니다. String을 Instrb에서 독립 변수로 사용하려면 듀얼 -Byte 문자열을 단일 -Byte 문자열로 변환하는 기능이 필요합니다.
저에게는 GetString ()과 GetByTestring ()의 두 가지 기능을 작성한 다음 나중에 설명했습니다.
구조
분해 된 데이터는 vbscript 사전 객체에 저장됩니다. 사전 객체는 해시 테이블 객체로 저장 (키, 항목)입니다. VBScript 및 ASP2.0의 일부입니다.
첫 번째 사전 객체 "uploadRequest"를 정의하십시오. 이 개체에는 업로드 테이블에서 제출 된 모든 컨트롤이 포함되어 있습니다. 키는 제어의 제어이며 항목은 객체에 포함 된 제어 정보입니다.
"ControlName1", 사전 제어 1
"ControlName2", 사전 제어 2
제어 된 사전 객체를 나타내는 다음 (키, 항목) 쌍이 포함됩니다.
"값", 문자열 또는 이진 컨텐츠
"Filename", 업로드 된 파일 이름
"ContentType", 업로드 된 파일의 ContentType
이것들을 결합하면 다음과 같은 예가 있습니다.
업로드 레퍼스트 : "이메일", 업로드 콘트롤 1 : "value", [이메일 보호]
"blob", uploadcontrol 2 : "filename", c : /upload/200902/file.gif "contenttype":
이미지/gif "value": gif89ai?
이 개체는 향후 액세스 및 사용 데이터에 매우 유용합니다.
분해
다음은 분해, 읽기 및 기록 업로드 제어 코드입니다. 이 프로세스는 "BuildUploadRequest"프로그램으로 완료됩니다.이 프로그램에는 하나의 독립적 인 변수가 있습니다.
Sub BuildUploadRequest (requestBin)
우선, 구분 선을 찾아야합니다.
'경계를 가져옵니다. posbeg = 1 posend = instrb를 얻으십시오
부
|||