Le composant de téléchargement SWFUpload a été initialement développé par Vinterwebb.se. Le corps principal du composant est intégré à Flash et JavaScript. Il est principalement dédié à la résolution du problème du téléchargement de plusieurs fichiers et de fichiers volumineux. Le composant fournit une multitude d'événements et d'interfaces. pour un appel facile par les développeurs Web. Vous pouvez facilement contrôler le style et obtenir l'effet de téléchargement souhaité via js et css. Mais peut-être qu'à mesure qu'ASP disparaît progressivement du développement Web, le responsable ne fournit que des programmes de traitement de téléchargement pour .net, php et d'autres versions. Pour les développeurs ASP, ils doivent gérer eux-mêmes la réception des données côté serveur.
Lorsque je suis entré en contact avec ce composant pour la première fois, j'ai été attiré par ses fonctions puissantes, sa flexibilité et sa commodité. Depuis que le projet a été développé en utilisant ASP à cette époque, Baidu a découvert après quelques recherches qu'il n'existait aucun programme de traitement de téléchargement ASP utile (maintenant). il y en a beaucoup ^^), il semblait donc que je ne pouvais le faire que moi-même. Recherche et développement Au départ, la méthode de traitement des téléchargements ordinaires était utilisée pour intercepter les données des fichiers. Après plusieurs tests, il s'est avéré qu'elle ne pouvait pas recevoir efficacement. les données du fichier transmises par le composant. , je n'ai eu d'autre choix que de commencer à analyser le format des données envoyées. Grâce à l'analyse, j'ai découvert que le format des données envoyées était encore quelque peu différent des téléchargements ordinaires. Les images et les fichiers étaient envoyés au serveur sous forme de flux d'octets. J'ai compris les données. Formatage, le reste est à intercepter. Je partagerai ma méthode de traitement avec des amis qui en ont besoin. La vitesse de traitement est tout à fait idéale.
Copiez le code comme suit :
<%
Classe SWUpload
FormData privé, chemin de dossier, streamGet
Taille de fichier privée, taille de morceau, bofCont, eofCont
REM CLASSE-INITIALISATION
Sous-classe privée_Initialize
Variante d'appelInit
Serveur.ScriptTimeOut = 1800
Définir streamGet = Server.CreateObject (ADODB.Stream)
sAuteur = 51JS.COM-ZMM
sVersion = Télécharger la classe 1.0
Fin du sous-marin
REM CLASSE-INITIALISATION
Propriété publique Laissez SaveFolder (byVal sFolder)
Si c'est vrai(sDossier, 1) = / Alors
chemindossier = sDossier
Autre
chemindossier = sDossier & /
Fin si
Propriété de fin
Propriété publique Obtenir SaveFolder
SaveFolder = chemin du dossier
Propriété de fin
InitVariant de fonction privée
taille du morceau = 1024 * 128
chemindossier = / : taillefichier = 1024 * 10
bofCont = StrToByte (octet-stream & vbCrlf & vbCrlf)
eofCont = StrToByte(vbCrlf & String(12, -))
Fonction de fin
Fonction publique GetUploadData
Dim curRead : curRead = 0
Dim dataLen : dataLen = Request.TotalBytes
streamGet.Type = 1 : streamGet.Open
Faire pendant curRead < dataLen
Dim partLen : partLen = chunkSize
Si partLen + curRead > dataLen Alors partLen = dataLen - curRead
streamGet.Write Request.BinaryRead(partLen)
curRead = curRead + partLen
Boucle
streamGet.Position = 0
formData = streamGet.Read (dataLen)
Appeler GetUploadFile
Fonction de fin
Fonction publique 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 = chemin_dossier & GetClientName(cntPath)
Dim begFile : begFile = InStrB(1, formData, bofCont) + 15
Dim endFile : endFile = InStrB (begFile, formData, eofCont)
Appelez SaveUploadFile (cntName, begFile, endFile - begFile)
Fonction de fin
Fonction publique SaveUploadFile (byVal fName, byVal bCont, byVal sLen)
Dim filePath : filePath = Server.MapPath(fName)
Si CreateFolder(|, GetParentFolder(filePath)) Alors
streamGet.Position = bCont
Définir streamPut = Server.CreateObject(ADODB.Stream)
streamPut.Type = 1 : streamPut.Mode = 3 : streamPut.Open
streamPut.Write streamGet.Read(sLen)
streamPut.SaveToFile filePath, 2
streamPut.Close : Définir streamPut = Rien
Fin si
Fonction de fin
La fonction privée n'est rien (par Val sVar)
IsNothing = IsNull(sVar) Ou (sVar = Vide)
Fonction de fin
Fonction privée StrToByte (byVal sText)
Pour i = 1 À Len(sTexte)
StrToByte = StrToByte & ChrB (Asc (Mid (sText, i, 1)))
Suivant
Fonction de fin
Fonction privée ByteToStr (byVal sByte)
Dim streamTmp
Définir 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.Fermer
Définir streamTmp = Rien
Fonction de fin
Fonction privée GetClientName (byVal bInfo)
Dim sInfo, regEx
sInfo = OctetVersStr(bInfo)
Si IsNothing(sInfo) Alors
ObtenirNomClient =
Autre
Définir regEx = Nouvelle RegExp
regEx.Pattern = ^.*//([^//]+)$
regEx.Global = Faux
regEx.IgnoreCase = Vrai
GetClientName = regEx.Replace(sInfo, $1)
Définir regEx = Rien
Fin si
Fonction de fin
Fonction privée GetParentFolder (byVal sPath)
Dim regEx
Définir regEx = Nouvelle RegExp
regEx.Pattern = ^(.*)//[^//]*$
regEx.Global = Vrai
regEx.IgnoreCase = Vrai
GetParentFolder = regEx.Replace(sPath, $1)
Définir regEx = Rien
Fonction de fin
Fonction privée CreateFolder (byVal sLine, byVal sPath)
pour
Définir oFso = Server.CreateObject (Scripting.FileSystemObject)
Si ce n'est pas oFso.FolderExists (sPath) alors
Dim regEx
Définir regEx = Nouvelle RegExp
regEx.Pattern = ^(.*)//([^//]*)$
regEx.Global = Faux
regEx.IgnoreCase = Vrai
sLine = sLine & regEx.Replace(sPath, $2) & |
sPath = regEx.Replace(sPath, $1)
Si CreateFolder(sLine, sPath) Alors CreateFolder = True
Définir regEx = Rien
Autre
Si sLigne = | Alors
CreateFolder = Vrai
Autre
Dim sTemp : sTemp = Mid(sLine, 2, Len(sLine) - 2)
Si InStrRev(sTemp, |) = 0 Alors
sLigne = |
sPath = sPath & / & sTemp
Autre
Dossier Dim : Dossier = Mid(sTemp, InStrRev(sTemp, |) + 1)
sLigne = | & Milieu(sTemp, 1, InStrRev(sTemp, |) - 1) & |
sPath = sPath & / & Dossier
Fin si
oFso.CreateFolder chemin sPath
Si CreateFolder(sLine, sPath) Alors CreateFolder = True
Terminer si
Fin si
Définir oFso = Rien
Fonction de fin
TERMINATION DE LA CLASSE REM
Sous-classe privée_Terminate
streamGet.Fermer
Définir streamGet = Rien
Fin du sous-marin
Fin du cours
Méthode d'appel REM
Faible oTélécharger
Définir oUpload = Nouveau SWFUpload
oUpload.SaveFolder = chemin de stockage
oUpload.GetUploadData
Définir oUpload = Rien
%>