SWFUpload 업로드 구성 요소는 원래 Vinterwebb.se에서 개발되었습니다. 구성 요소의 본체는 주로 여러 파일과 대용량 파일을 업로드하는 문제를 해결하는 데 전념합니다. 웹 개발자가 쉽게 호출할 수 있도록 js 및 css를 통해 스타일을 쉽게 제어하고 원하는 업로드 효과를 얻을 수 있습니다. 그러나 웹 개발에서 ASP가 점차 사라지면서 공식적으로는 .net, php 및 기타 버전에 대한 업로드 처리 프로그램만 제공하고 있습니다. ASP 개발자의 경우 서버 측에서 데이터 수신을 스스로 처리해야 합니다.
처음 이 컴포넌트를 접했을 때 그 강력한 기능과 유연성, 편의성에 매료되었습니다. 당시 이 프로젝트는 ASP를 사용하여 개발되었기 때문에 Baidu는 몇 가지 조사 끝에 유용한 ASP 업로드 처리 프로그램이 없다는 것을 알게 되었습니다(현재). 많이 있습니다^^) 그래서 제가 직접 할 수 밖에 없는 것 같았습니다.. 처음에는 파일 데이터를 가로채기 위해 일반적인 업로드 처리 방법을 사용했지만 효과적으로 수신할 수 없는 것으로 나타났습니다. 구성 요소가 전달한 파일 데이터입니다. , 전송된 데이터 형식을 분석할 수밖에 없었습니다. 분석을 통해 전송된 데이터 형식이 여전히 일반 업로드와 다소 다르다는 것을 발견했습니다. 데이터를 이해하고 나머지는 가로채는 것입니다. 처리 속도가 매우 이상적인 친구들과 공유하겠습니다.
다음과 같이 코드 코드를 복사합니다.
<%
클래스 SW업로드
비공개 양식데이터, 폴더 경로, streamGet
비공개 fileSize, ChunkSize, bofCont, eofCont
REM 클래스 초기화
비공개 하위 클래스_초기화
CallInitVariant
Server.ScriptTimeOut = 1800
streamGet = Server.CreateObject(ADODB.Stream) 설정
작성자 = 51JS.COM-ZMM
sVersion = 클래스 1.0 업로드
서브 끝
REM 클래스 초기화
공용 속성 SaveFolder(byVal sFolder) 사용
If Right(sFolder, 1) = / 그러면
폴더 경로 = sFolder
또 다른
폴더 경로 = s폴더 & /
종료 조건
끝 속성
공용 속성 SaveFolder 가져오기
SaveFolder = 폴더 경로
끝 속성
개인 함수 InitVariant
덩어리 크기 = 1024 * 128
폴더 경로 = / : 파일 크기 = 1024 * 10
bofCont = StrToByte(옥텟 스트림 & vbCrlf & vbCrlf)
eofCont = StrToByte(vbCrlf & 문자열(12, -))
기능 종료
공개 함수 GetUploadData
희미한 curRead : curRead = 0
희미한 dataLen : dataLen = Request.TotalBytes
streamGet.Type = 1 : streamGet.Open
curRead < dataLen 동안 수행
희미한 partLen : partLen = ChunkSize
partLen + curRead > dataLen이면 partLen = dataLen - curRead
streamGet.Write 요청.BinaryRead(partLen)
curRead = curRead + partLen
고리
streamGet.Position = 0
formData = streamGet.Read(dataLen)
GetUploadFile 호출
기능 종료
공개 함수 GetUploadFile
Dim begMark : begMark = StrToByte(파일 이름=)
Dim begPath : begPath = InStrB(1, formData, begMark & ChrB(34)) + 10
Dim endPath : endPath = InStrB(begPath, formData, ChrB(34))
Dim cntPath : cntPath = MidB(formData, begPath, endPath - begPath)
Dim cntName : cntName = 폴더 경로 & GetClientName(cntPath)
Dim begFile : begFile = InStrB(1, formData, bofCont) + 15
Dim endFile : endFile = InStrB(begFile, formData, eofCont)
SaveUploadFile(cntName, begFile, endFile - begFile) 호출
기능 종료
공용 함수 SaveUploadFile(byVal fName, byVal bCont, byVal sLen)
희미한 filePath : filePath = Server.MapPath(fName)
CreateFolder(|, GetParentFolder(filePath)) 인 경우
streamGet.Position = bCont
streamPut = Server.CreateObject(ADODB.Stream) 설정
streamPut.Type = 1 : streamPut.Mode = 3 : streamPut.Open
streamPut.Write streamGet.Read(sLen)
streamPut.SaveToFile 파일 경로, 2
streamPut.Close : streamPut = 없음으로 설정
종료 조건
기능 종료
개인 함수 IsNothing(byVal sVar)
IsNothing = IsNull(sVar) 또는 (sVar = 비어 있음)
기능 종료
개인 함수 StrToByte(byVal sText)
i = 1에서 Len(sText)까지
StrToByte = StrToByte & ChrB(Asc(Mid(sText, i, 1)))
다음
기능 종료
개인 함수 ByteToStr(byVal sByte)
희미한 스트림Tmp
streamTmp = Server.CreateObject(ADODB.Stream) 설정
streamTmp.Type = 2
streamTmp.Mode = 3
streamTmp.Open
streamTmp.WriteText sByte
streamTmp.Position = 0
streamTmp.CharSet = utf-8
streamTmp.Position = 2
ByteToStr = streamTmp.ReadText
streamTmp.Close
streamTmp = 없음 설정
기능 종료
개인 함수 GetClientName(byVal bInfo)
희미한 sInfo, regEx
sInfo = ByteToStr(bInfo)
IsNothing(sInfo)이면
Get클라이언트 이름 =
또 다른
regEx = 새 RegExp 설정
regEx.Pattern = ^.*//([^//]+)$
regEx.Global = 거짓
regEx.IgnoreCase = 참
GetClientName = regEx.Replace(sInfo, $1)
regEx = 없음 설정
종료 조건
기능 종료
개인 함수 GetParentFolder(byVal sPath)
희미한 정규식
regEx = 새 RegExp 설정
regEx.Pattern = ^(.*)//[^//]*$
regEx.Global = 참
regEx.IgnoreCase = 참
GetParentFolder = regEx.Replace(sPath, $1)
regEx = 없음 설정
기능 종료
개인 함수 CreateFolder(byVal sLine, byVal sPath)
FO
oFso = Server.CreateObject(Scripting.FileSystemObject) 설정
oFso.FolderExists(sPath)가 아닌 경우
희미한 정규식
regEx = 새 RegExp 설정
regEx.Pattern = ^(.*)//([^//]*)$
regEx.Global = 거짓
regEx.IgnoreCase = 참
sLine = sLine & regEx.Replace(sPath, $2) & |
sPath = regEx.Replace(sPath, $1)
CreateFolder(sLine, sPath)이면 CreateFolder = True
regEx = 없음 설정
또 다른
sLine = 다음인 경우 |
CreateFolder = 참
또 다른
Dim sTemp : sTemp = Mid(sLine, 2, Len(sLine) - 2)
InStrRev(sTemp, |) = 0인 경우
s라인 = |
sPath = sPath & / & sTemp
또 다른
Dim 폴더 : 폴더 = Mid(sTemp, InStrRev(sTemp, |) + 1)
sLine = | & Mid(sTemp, 1, InStrRev(sTemp, |) - 1) & |
sPath = sPath &/& 폴더
종료 조건
oFso.CreateFolder sPath
CreateFolder(sLine, sPath)이면 CreateFolder = True
다음과 같은 경우 종료
종료 조건
ofFso = 없음 설정
기능 종료
REM 클래스 종료
비공개 하위 클래스_종료
streamGet.Close
streamGet = 없음 설정
서브 끝
수업 종료
REM 호출 방법
희미한 업로드
oUpload = 새 SWFUpload 설정
oUpload.SaveFolder = 저장 경로
oUpload.GetUploadData
o업로드 = 없음 설정
%>