Die SWFUpload-Upload-Komponente wurde ursprünglich von Vinterwebb.se entwickelt. Der Hauptteil der Komponente ist in Flash und JavaScript integriert. Sie dient hauptsächlich der Lösung des Problems des Hochladens mehrerer Dateien und großer Dateien Zum einfachen Aufrufen durch Webentwickler können Sie den Stil einfach steuern und den gewünschten Upload-Effekt über js und css erzielen. Da ASP jedoch allmählich aus der Webentwicklung verschwindet, stellt der Beamte nur noch Upload-Verarbeitungsprogramme für .net, PHP und andere Versionen bereit. Für ASP-Entwickler müssen sie sich selbst um den Datenempfang auf der Serverseite kümmern.
Als ich zum ersten Mal mit dieser Komponente in Kontakt kam, war ich von ihren leistungsstarken Funktionen, ihrer Flexibilität und ihrem Komfort fasziniert. Da das Projekt damals mit ASP entwickelt wurde, stellte Baidu nach einiger Recherche fest, dass es kein nützliches ASP-Upload-Verarbeitungsprogramm gab (heute). Es gibt viele ^^), daher schien es, dass ich es nur selbst tun konnte. Ursprünglich wurde die Methode zur Verarbeitung gewöhnlicher Uploads zum Abfangen von Dateidaten verwendet die von der Komponente übergebenen Dateidaten. Ich hatte keine andere Wahl, als mit der Analyse des gesendeten Datenformats zu beginnen. Durch die Analyse stellte ich fest, dass sich das gesendete Datenformat immer noch etwas von normalen Uploads unterschied Ich habe die Datenformatierung verstanden, der Rest ist, meine Verarbeitungsmethode mit Freunden zu teilen, die sie benötigen.
Kopieren Sie den Codecode wie folgt:
<%
Klasse SWUpload
Private formData, FolderPath, StreamGet
Private fileSize, chunkSize, bofCont, eofCont
REM-KLASSE-INITIALISIEREN
Private Sub Class_Initialize
CallInitVariant
Server.ScriptTimeOut = 1800
Setze streamGet = Server.CreateObject(ADODB.Stream)
sAuthor = 51JS.COM-ZMM
sVersion = Klasse 1.0 hochladen
Sub beenden
REM-KLASSE-INITIALISIEREN
Öffentliche Eigenschaft Let SaveFolder(byVal sFolder)
Wenn Right(sFolder, 1) = / Then
FolderPath = sFolder
Anders
FolderPath = sFolder & /
Ende wenn
End-Eigenschaft
Öffentliches Eigentum Holen Sie sich SaveFolder
SaveFolder = Ordnerpfad
End-Eigenschaft
Private Funktion InitVariant
chunkSize = 1024 * 128
FolderPath = / : fileSize = 1024 * 10
bofCont = StrToByte(octet-stream & vbCrlf & vbCrlf)
eofCont = StrToByte(vbCrlf & String(12, -))
Funktion beenden
Öffentliche Funktion GetUploadData
CurRead dimmen: curRead = 0
Dimmen Sie dataLen: dataLen = Request.TotalBytes
streamGet.Type = 1 : streamGet.Open
Machen Sie While curRead < dataLen
Dimmen Sie partLen: partLen = chunkSize
Wenn partLen + curRead > dataLen, dann partLen = dataLen - curRead
streamGet.Write Request.BinaryRead(partLen)
curRead = curRead + partLen
Schleife
streamGet.Position = 0
formData = streamGet.Read(dataLen)
Rufen Sie GetUploadFile auf
Funktion beenden
Öffentliche Funktion GetUploadFile
Dim begMark : begMark = StrToByte(filename=)
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 = FolderPath & GetClientName(cntPath)
Dim begFile : begFile = InStrB(1, formData, bofCont) + 15
Dim endFile : endFile = InStrB(begFile, formData, eofCont)
Rufen Sie SaveUploadFile(cntName, begFile, endFile - begFile) auf.
Funktion beenden
Öffentliche Funktion SaveUploadFile(byVal fName, byVal bCont, byVal sLen)
FilePath dimmen: filePath = Server.MapPath(fName)
Wenn CreateFolder(|, GetParentFolder(filePath)) Dann
streamGet.Position = bCont
Setze streamPut = Server.CreateObject(ADODB.Stream)
streamPut.Type = 1: streamPut.Mode = 3: streamPut.Open
streamPut.Write streamGet.Read(sLen)
streamPut.SaveToFile filePath, 2
streamPut.Close: StreamPut = Nothing festlegen
Ende wenn
Funktion beenden
Private Funktion IsNothing(byVal sVar)
IsNothing = IsNull(sVar) Or (sVar = Empty)
Funktion beenden
Private Funktion StrToByte(byVal sText)
Für i = 1 To Len(sText)
StrToByte = StrToByte & ChrB(Asc(Mid(sText, i, 1)))
Nächste
Funktion beenden
Private Funktion ByteToStr(byVal sByte)
StreamTmp dimmen
Setze 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
Setze streamTmp = Nothing
Funktion beenden
Private Funktion GetClientName(byVal bInfo)
Dimmen Sie sInfo, regEx
sInfo = ByteToStr(bInfo)
If IsNothing(sInfo) Then
GetClientName =
Anders
Setze regEx = New RegExp
regEx.Pattern = ^.*//([^//]+)$
regEx.Global = Falsch
regEx.IgnoreCase = True
GetClientName = regEx.Replace(sInfo, $1)
Setze regEx = Nothing
Ende wenn
Funktion beenden
Private Funktion GetParentFolder(byVal sPath)
RegEx dimmen
Setze regEx = New RegExp
regEx.Pattern = ^(.*)//[^//]*$
regEx.Global = True
regEx.IgnoreCase = True
GetParentFolder = regEx.Replace(sPath, $1)
Setze regEx = Nothing
Funktion beenden
Private Funktion CreateFolder(byVal sLine, byVal sPath)
fO
Setze oFso = Server.CreateObject(Scripting.FileSystemObject)
Wenn nicht oFso.FolderExists(sPath) Dann
RegEx dimmen
Setze regEx = New RegExp
regEx.Pattern = ^(.*)//([^//]*)$
regEx.Global = Falsch
regEx.IgnoreCase = True
sLine = sLine & regEx.Replace(sPath, $2) & |
sPath = regEx.Replace(sPath, $1)
Wenn CreateFolder(sLine, sPath) dann CreateFolder = True
Setze regEx = Nothing
Anders
Wenn sLine = |. Dann
CreateFolder = True
Anders
Dim sTemp: sTemp = Mid(sLine, 2, Len(sLine) - 2)
Wenn InStrRev(sTemp, |) = 0, dann
sLine = |
sPath = sPath & / & sTemp
Anders
Dim-Ordner: Ordner = Mid(sTemp, InStrRev(sTemp, |) + 1)
sLine = |. & Mid(sTemp, 1, InStrRev(sTemp, |) - 1) & |
sPath = sPath & / & Ordner
Ende wenn
oFso.CreateFolder sPath
Wenn CreateFolder(sLine, sPath) dann CreateFolder = True
Ende wenn
Ende wenn
Setze oFso = Nichts
Funktion beenden
REM-KLASSE-TERMINATE
Private Unterklasse_Terminate
streamGet.Close
Setze streamGet = Nothing
Sub beenden
Unterricht beenden
REM-Aufrufmethode
oUpload dimmen
Legen Sie oUpload = Neuer SWFUpload fest
oUpload.SaveFolder = Speicherpfad
oUpload.GetUploadData
Stellen Sie oUpload = Nothing ein
%>