WEB 기술을 활용하여 B/S(브라우저/서버) 구조로 관리 시스템을 구현하는 것이 사무 자동화의 발전 추세입니다. WEB 기술을 기반으로 한 관리 시스템은 개발 주기가 짧고, 사용자 플랫폼에 독립적이며, 대화형 애플리케이션을 구현하기 쉽고, 빠르고 효율적으로 정보를 수집, 처리 및 게시할 수 있기 때문에 최근 몇 년간 빠르게 발전했습니다. ASP 기술은 높은 개발 효율성, 우수한 상호 작용성 및 강력한 보안으로 인해 점차 관리 시스템 개발에 선호되는 도구가 되었습니다.
많은 웹 기반 애플리케이션에는 파일 업로드 작업이 포함됩니다. 일반적인 파일 업로드 기술에는 HTTP 프로토콜 기반, VB(또는 DELPHI 및 기타 프로그래밍 언어)에서 개발한 파일 업로드 구성 요소 기반 등이 포함됩니다. 이러한 방법은 일반적으로 프로그래머가 WEB 기술, 데이터베이스 기술 또는 CGI 기술 또는 구성 요소 기술을 동시에 마스터해야 하며 프로그래머에 대한 요구 사항이 더 높습니다. 이 기사에서 소개할 파일 업로드 기능을 직접 구현하기 위해 ASP 기술을 사용하려면 프로그래머가 단일 ASP 기술만 마스터하면 되므로 프로그래밍의 어려움이 크게 줄어듭니다.
여러 파일 업로드 기술 비교
1. HTTP 프로토콜 기반
이 방법을 사용하려면 프로그래머가 DELPHI, VB 등과 같은 타사 소프트웨어를 사용하여 먼저 애플리케이션에서 HTTP 프로토콜 프로그래밍을 수행한 다음 파일 내용을 패키징해야 합니다. HTTP 프로토콜 형식으로 업로드되고 마지막으로 파일 업로드를 달성하기 위해 업로드 요청 메시지를 웹 서버에 보냅니다. DELPHI와 VB는 완전한 WEB 네트워크 프로그램을 작성할 수 없고 작은 WEB 애플리케이션만 작성할 수 있기 때문에 이 방법은 기능이 제한된 네트워크 애플리케이션에만 사용됩니다.
2. VB(또는 DELPHI 등)를 기반으로 개발된 파일 업로드 구성 요소
이 방법은 VB(또는 DELPHI 등의 프로그래밍 언어)를 사용하여 특정 파일 업로드 서비스를 구현하는 ASP 서버 구성 요소를 개발하는 방법입니다. 먼저 ASP 양식 기능을 사용하여 클라이언트에서 서버로 파일(바이너리 형식)을 업로드한 다음 VB에서 개발한 구성 요소를 사용하여 바이너리 파일을 정상적으로 읽고 쓸 수 있는 파일로 처리합니다. 이 방법을 사용하려면 프로그래머는 ASP 언어를 마스터해야 할 뿐만 아니라 컴포넌트 프로그래밍을 위해 VB와 같은 타사 언어를 사용해야 하므로 개발 난이도가 높아집니다.
3.
이 방법은 데이터베이스 기술을 기반으로 한 이전 방법과 유사합니다. 차이점은 업로드된 바이너리 파일 처리에 있습니다. 이진 파일을 저장하기 위해 데이터베이스를 사용합니다. 소규모 데이터베이스와 대규모 데이터베이스 모두 바이너리 데이터를 저장하기 위한 데이터 유형을 제공합니다. Append Chunk 메서드에서 해당 필드에 데이터를 저장하면 됩니다. 이 방법은 간단하고 실행 가능하지만 매번 업로드되는 파일의 크기가 다르기 때문에 데이터베이스 공간을 크게 낭비하고 데이터 액세스 속도를 저하시키며 데이터베이스 액세스 환경에서만 파일을 업로드할 수 있습니다. 큰 불편을 초래합니다.
분석 예
그러나 ASP 기술을 사용하여 파일 업로드 기능을 직접 구현하려면 프로그래머가 단일 ASP 기술만 마스터하면 되므로
프로그래밍의 어려움이 크게 줄어듭니다. 아래에서는 예제를 통해 이 방법을 사용하는 방법을 소개합니다.
1. 파일 업로드 양식
먼저 파일 업로드 기능을 제공할 수 있는 양식을 작성해야 합니다. 프로그램은 다음과 같습니다.
<Form action="upload.asp" method=post enctype="multipart/form-data">
파일 업로드:<입력 유형=파일 이름=file1><br>
<입력 유형=제출 이름=업로드 값="업로드">
</form>
그 중 enctype 매개변수는 파일을 업로드할 때(또는 텍스트 상자를 포함할 때) 해당 속성을 "multipart/form-data"로 설정해야 합니다. asp는 서버 측입니다. 수신된 바이너리 파일 스트림을 처리하는 ASP 프로그램은 이 기사의 뒷부분에서 소개됩니다.
2. 업로드 파일 형식 분석
파일을 처리하기 전에 먼저 업로드된 파일의 특정 형식을 이해해야 합니다. 다음과 같은 간단한 ASP 프로그램을 작성하여 해당 바이너리 코드를 볼 수 있습니다
.
filesize=Request.TotalBytes '업로드된 파일의 크기를 가져옵니다.
filedata=Request.BinaryRead(filesize) '업로드된 파일의 바이너리 데이터를 가져옵니다.
Response.BinaryWrite filedata '브라우저에 바이너리 데이터 표시
%>
브라우저에 표시된 업로드된 파일의 바이너리 코드를 분석하여 코드가 4개의 부분으로 구성되어 있음을 확인합니다(여러 개의 파일이나 텍스트 상자가 동시에 업로드된 경우 코드는 업로드된 순서대로 정렬되며 동일한 형식), 각 부분의 내용은 캐리지 리턴 및 줄바꿈 기호로 구분됩니다.
1) 첫 번째 부분(시작 표시)
-------------7d329631b04d4
2) 2부(파일 설명)
내용 처리: form-data; name="file1"; filename="C:Documents and SettingsAdministratorMy DocumentsInvitation.doc" 내용 유형: application/
msword 를 사용하면 업로드된 파일의 파일 이름과 절대 경로, 파일 형식을 얻을 수 있습니다. 이 정보는 파일을 올바르게 저장하는 데 필수적입니다.
3) 세 번째 부분(파일 내용)
은 파일의 바이너리 내용으로 생략됩니다.
4) 4부(End Mark)
-------------7d329631b04d4
1부와 4부의 내용을 살펴보겠습니다. "-- -----------------7d329631b04d4"(업로드할 때마다 값이 다름)가 구분자 역할을 하는데, 업로드가 여러 개인 경우 데이터 조각의 시작과 끝을 표시합니다. 파일을 저장하는 데 필요한 정보 측면에서 먼저 데이터의 두 번째 부분인 "파일 이름"에서 파일 이름을 얻은 다음 파일의 시작 위치를 올바르게 찾고 마지막으로 ASP 기술을 사용해야 합니다. 바이너리 파일을 원래 파일 이름으로 저장하면 됩니다. 여러 개의 콘텐츠(여러 개의 텍스트 상자 및 파일 등)를 동시에 업로드하는 경우 동일한 방식으로 처리됩니다. 콘텐츠의 각 부분은 구분 기호에 포함되지만 텍스트 상자와 파일은 약간 다른 방식으로 표현됩니다. . 이는 바이너리 코드를 구체적으로 분석하여 이해할 수 있습니다.
3. ASP 기술을 사용하여 파일 저장 구현
및 파일 코드 처리 업로드
1) 구분 기호 코드를 얻습니다.
위 분석을 통해 구분 기호가 여러 데이터 세그먼트(텍스트 상자 및 다양한 유형의 파일 포함)를 구분하는 데 중요한 역할을 한다는 것을 이미 알고 있습니다. ) . 이전에 분석한 대로 구분 기호는 첫 번째 캐리지 리턴 및 줄 바꿈 기호 앞에 나타납니다. 따라서 구분 기호 코드는 다음 프로그램을 통해 얻을 수 있습니다.
<%
newline=chrB(13) & chrB(10) ' 개행 문자는 이진 캐리지 리턴 문자를 나타냅니다.
filesize=Request.TotalBytes 'filesize는 업로드된 파일의 크기입니다.
filedata=Request.BinaryRead(filesize) 'filedata는 업로드된 파일의 바이너리 데이터입니다.
Divider=leftB(filedata,clng(instrb(filedata,newline))-1) 'divider는 구분선입니다.
%>
참고: 여기의 모든 프로세스는 바이너리 바이트코드이므로 모든 함수는 "b"가 추가된 바이너리 버전을 사용합니다.
2) 파일(또는 텍스트 상자)의 내용 가져오기
(1) 준비 기능(바이너리 문자열을 문자열로 변환)
업로드된 파일의 내용은 바이너리에서 문자열로 변환하는 과정을 거치지 않고 바로 저장할 수 있습니다. . 단, 텍스트 상자의 내용이나 파일 이름을 추출해야 하는 경우에는 변환을 수행해야 합니다. 따라서 한자에 적합한 범용 변환 함수를 작성하는 것이 필요하다. 다음은 함수 코드입니다:
함수 BtoS(bstr)
그렇지 않은 경우 Null(bstr)입니다.
i = 0에서 lenb(bstr) - 1까지
bchr = midb(bstr,i+1,1)
If ascb(bchr)>127 Then '한자는 2바이트이므로 두 문자를 함께 처리해야 합니다.
temp = temp&chr(ascw(midb(bstr, i+2, 1)&bchr))
나는 = 나는+1
또 다른
온도 = 온도&문자(ascb(bchr))
종료 조건
다음
종료 조건
BtoS=온도
종료 기능
(2) 파일(또는 텍스트 상자)의 내용을 가져옵니다.
실제 웹 응용 프로그램에서는 업로드 작업에 여러 텍스트 상자, 여러 파일 등과 같은 여러 내용이 포함될 수 있습니다. 파일과 텍스트 상자는 쉽게 구별됩니다. 파일 데이터에는 "filename=" 문자열이 포함되어 있습니다. 따라서 우리는 파일 내용과 텍스트 상자 내용을 모두 추출하는 데 사용할 수 있는 다음 일반 함수를 작성했습니다(이진 변환 필요).
함수 getdata(byval data, byval Divider, final) 'data는 이진 문자열을 나타냅니다. 기호는 최종 데이터의 끝 위치를 나타냅니다.
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) '문자열 "filename"의 바이너리 표현
bncrlf=chrb(13)&chrb(10) '이진 캐리지 리턴 문자
startpos = instrb(data,divider)+lenb(divider)+lenb(bncrlf) '시작 위치
endpos = instrb(startpos,data, Divider)-lenb(bncrlf) '끝 위치
part1 = midb(data, startpos, endpos-startpos) '두 구분 기호 사이의 내용
firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' 내용 앞의 설명 단락
If (instrb(firstline,filename)=0) Then '텍스트 상자인 경우 텍스트 상자 문자열 내용을 가져옵니다.
줄기=midb(부분1,instrb(부분1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(부분1)-instrb(부분1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(단계)
Else '파일인 경우 파일의 바이너리 내용을 가져옵니다.
Getdata=midb(부분1, instrb(부분1, bncrlf&bncrlf)+lenb(bncrlf&bncrlf), lenb(부분1)
-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
종료 조건
최종=끝 위치
함수 종료
아래와 같이 프로그램에서 직접 이 함수를 호출하여 필요한 파일(또는 텍스트 상자)의 내용을 가져옵니다.
<%
Content=getdata(데이터, 구분선, 위치)
%>
3) 파일 이름 가져오기는 이전에 분석되었습니다. 업로드된 파일 데이터 스트림의 "filename=" 필드에는 파일의 이름과 절대 경로가 포함됩니다. 일반적으로 경로에서 파일 이름만 추출하면 됩니다. 다음은 프로그램 코드입니다.
<%
namepos=instrrev(B2S(firstline),chr(92)) 'firstline은 위에서 얻은 설명 부분 데이터, chr(92)
표현하다"/"
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) '파일 이름을 가져옵니다.
%>
ASP를 사용하여 파일 업로드 기능을 직접 구현합니다.
기존 ASP 프로그래머는 FILESYSTEMOBJECT 개체를 사용하여 텍스트 파일(.txt)에 대한 이동, 복사, 삭제 및 기타 작업을 수행해야 합니다. 이 문서의 앞부분에서 소개한 방법입니다. 그러나 이제 ASP의 ADO.STREAM 개체는 텍스트 개체와 바이너리 개체를 동시에 작동할 수 있으며( http://www.microsoft.com/data 에서 다운로드 가능) 이를 사용하여 파일 업로드를 직접 구현할 수 있습니다. ASP에서 기능을 수행합니다. 아래에서는 구현 과정을 소개합니다.
1) STREAM 객체를 엽니다.
SREAM 객체의 경우 파일을 저장하려면 객체의 전체 내용을 저장해야 합니다. 따라서 두 개(또는 그 이상)의 STREAM 객체를 생성해야 합니다. 그 중 하나는 초기 바이너리 데이터를 수신하는 소스 데이터 스트림이고, 다른 하나는 소스 데이터 스트림에서 처리된 데이터를 수신하는 대상 데이터 스트림입니다. 원하는 파일에 저장하세요.
<%
set str=server.CreateObject("ADODB.Stream") 'str은 소스 데이터 스트림입니다.
str.Mode=3 '개방 모드를 설정합니다. 3은 읽고 쓸 수 있습니다.
str.Type=1 '데이터 유형을 설정합니다. 1은 바이너리 데이터입니다.
str.Open
set desc=server.CreateObject("ADODB.Stream") 'desc는 대상 데이터 스트림입니다.
설명.모드=3
설명 유형=1
설명.열기
%>
2) STEAM 개체 간 콘텐츠 복사
이 부분에서는 파일을 대상 데이터 스트림에 올바르게 복사하고 저장하기 전에 소스 데이터 스트림에서 파일의 시작 부분을 찾고 파일 콘텐츠의 길이를 찾아야 합니다. 파일입니다. 프로그램 코드는 다음과 같습니다:
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata는 업로드된 모든 콘텐츠입니다
str.Write formdata '소스 데이터 스트림 할당
str.position=count-lenb(result)-2 '위치는 파일의 시작을 가리킵니다.
str.copyto desc, lenb(filecotent) 'lenb(filecontent)는 파일의 길이를 나타냅니다.
desc.SaveToFile fullpath,2 'fullpath에서 지정한 경로와 이름으로 파일을 저장합니다.
%>
3) STEAM 개체를 닫습니다.
프로그래밍이 완료되면 아래와 같이 STEAM 개체를 닫고 해제해야 합니다.
<%
설명 닫기
설명=아무것도 설정하지 않음
닫기
STR=아무것도 설정하지 않음
%>
요약
이 글에서는 ASP를 이용하여 파일 업로드를 직접 구현하는 방법을 제시하는데, 이는 본 단원에서 개발한 정보 관리 시스템에 잘 적용되어 있다. 실습을 통해 이 방법이 여러 기존 파일 업로드 방법보다 더 간단하고 효율적이라는 것이 입증되었습니다.