El componente de carga SWFUpload fue desarrollado originalmente por Vinterwebb.se. El cuerpo principal del componente está integrado con Flash y JavaScript. Está dedicado principalmente a resolver el problema de cargar múltiples archivos y archivos grandes. El componente proporciona una gran cantidad de eventos e interfaces. para que los desarrolladores web lo llamen fácilmente. Puede controlar fácilmente el estilo y lograr el efecto de carga deseado a través de js y css. Pero tal vez a medida que ASP desaparezca gradualmente del desarrollo web, el funcionario solo proporciona programas de procesamiento de carga para .net, php y otras versiones. Los desarrolladores de ASP necesitan manejar la recepción de datos en el lado del servidor por sí mismos.
Cuando entré en contacto por primera vez con este componente, me atrajeron sus poderosas funciones, flexibilidad y conveniencia. Dado que el proyecto se desarrolló usando ASP en ese momento, Baidu descubrió después de algunas investigaciones que no existía un programa de procesamiento de carga ASP útil (ahora). hay muchos ^^), por lo que parecía que solo podía hacerlo yo mismo. Inicialmente, se utilizó el método de procesamiento de cargas ordinarias para interceptar datos de archivos. los datos del archivo pasados por el componente. , No tuve más remedio que comenzar a analizar el formato de datos que envió. A través del análisis, descubrí que el formato de datos que envió todavía era algo diferente de las cargas normales. Entendí el formato de los datos, el resto es para interceptar. Compartiré mi método de procesamiento con amigos que lo necesiten.
Copie el código de código de la siguiente manera:
<%
Clase SWUpload
Formulario privadoDatos, carpetaRuta, flujoObtener
Tamaño de archivo privado, tamaño de fragmento, bofCont, eofCont
INICIALIZACIÓN DE CLASE REM
Subclase privada_Inicializar
CallInitVariant
Servidor.ScriptTimeOut = 1800
Establecer streamGet = Server.CreateObject(ADODB.Stream)
Autor = 51JS.COM-ZMM
sVersion = Cargar Clase 1.0
Subtítulo final
INICIALIZACIÓN DE CLASE REM
Propiedad pública Let SaveFolder(byVal sFolder)
Si Derecha(sCarpeta, 1) = / Entonces
rutacarpeta = sCarpeta
Demás
rutacarpeta = sCarpeta & /
Terminar si
Propiedad final
Propiedad pública Obtener SaveFolder
GuardarCarpeta = ruta de la carpeta
Propiedad final
Variante de inicio de función privada
tamaño del trozo = 1024 * 128
ruta de la carpeta = /: tamaño del archivo = 1024 * 10
bofCont = StrToByte(flujo de octetos y vbCrlf y vbCrlf)
eofCont = StrToByte(vbCrlf & String(12, -))
Función final
Función pública GetUploadData
Dim curRead: curRead = 0
Dim dataLen: dataLen = Solicitud.TotalBytes
streamGet.Type = 1: streamGet.Open
Hacer mientras curRead < dataLen
Dim partLen: partLen = tamaño del trozo
Si partLen + curRead > dataLen Entonces partLen = dataLen - curRead
streamGet.Write Request.BinaryRead(partLen)
curRead = curRead + partLen
Bucle
flujoGet.Position = 0
formData = streamGet.Read(dataLen)
Llame a GetUploadFile
Función final
Función pública GetUploadFile
Dim begMark: begMark = StrToByte(nombre de archivo=)
Dim begPath: begPath = InStrB(1, formData, begMark y ChrB(34)) + 10
Dim endPath: endPath = InStrB(begPath, formData, ChrB(34))
Dim cntPath: cntPath = MidB(formData, begPath, endPath - begPath)
Dim cntName: cntName = carpetaPath y GetClientName(cntPath)
Dim begFile: begFile = InStrB(1, formData, bofCont) + 15
Dim endFile: endFile = InStrB(begFile, formData, eofCont)
Llame a SaveUploadFile(cntName, begFile, endFile - begFile)
Función final
Función pública SaveUploadFile (byVal fName, byVal bCont, byVal sLen)
Dim filePath: filePath = Server.MapPath(fName)
Si CreateFolder (|, GetParentFolder (filePath)) Entonces
streamGet.Position = bCont
Establecer streamPut = Server.CreateObject(ADODB.Stream)
streamPut.Type = 1: streamPut.Mode = 3: streamPut.Open
streamPut.Write streamGet.Read(sLen)
streamPut.SaveToFile filePath, 2
streamPut.Close: Establecer streamPut = Nada
Terminar si
Función final
La función privada no es nada (porVal sVar)
IsNothing = IsNull(sVar) O (sVar = Vacío)
Función final
Función privada StrToByte(byVal sText)
Para i = 1 a Len(sText)
StrToByte = StrToByte y ChrB(Asc(Mid(sText, i, 1)))
Próximo
Función final
Función privada ByteToStr(byVal sByte)
Corriente tenueTmp
Establecer streamTmp = Server.CreateObject(ADODB.Stream)
flujoTmp.Tipo = 2
streamTmp.Modo = 3
streamTmp.Open
streamTmp.WriteText sByte
flujoTmp.Posición = 0
streamTmp.CharSet = utf-8
flujoTmp.Posición = 2
ByteToStr = flujoTmp.ReadText
streamTmp.Cerrar
Establecer streamTmp = Nada
Función final
Función privada GetClientName(byVal bInfo)
Dim sInfo, expresión regular
sInfo = ByteToStr(bInfo)
Si no hay nada (sInfo) entonces
ObtenerNombreCliente =
Demás
Establecer expresión regular = nueva expresión regular
regEx.Patrón = ^.*//([^//]+)$
regEx.Global = Falso
regEx.IgnoreCase = Verdadero
GetClientName = regEx.Replace(sInfo, $1)
Establecer expresión regular = Nada
Terminar si
Función final
Función privada GetParentFolder (byVal sPath)
expresión regular tenue
Establecer expresión regular = nueva expresión regular
regEx.Patrón = ^(.*)//[^//]*$
regEx.Global = Verdadero
regEx.IgnoreCase = Verdadero
GetParentFolder = regEx.Replace(sPath, $1)
Establecer expresión regular = Nada
Función final
Función privada CreateFolder (byVal sLine, byVal sPath)
para
Establecer oFso = Server.CreateObject(Scripting.FileSystemObject)
Si no es oFso.FolderExists (sPath), entonces
expresión regular tenue
Establecer expresión regular = nueva expresión regular
regEx.Patrón = ^(.*)//([^//]*)$
regEx.Global = Falso
regEx.IgnoreCase = Verdadero
sLine = sLine & regEx.Replace(sPath, $2) & |
RutaPath = regEx.Replace(PathPath, $1)
Si CreateFolder (sLine, sPath) Entonces CreateFolder = True
Establecer expresión regular = Nada
Demás
Si sLine = | Entonces
CrearCarpeta = Verdadero
Demás
Temp sTemp tenue: sTemp = Mid(sLine, 2, Len(sLine) - 2)
Si InStrRev(sTemp, |) = 0 Entonces
línea = |
sPath = sPath & / & sTemp
Demás
Carpeta oscura: Carpeta = Mid(sTemp, InStrRev(sTemp, |) + 1)
sLine = | & Medio(sTemp, 1, InStrRev(sTemp, |) - 1) & |
sPath = sPath &/& Carpeta
Terminar si
Ruta de acceso oFso.CreateFolder
Si CreateFolder (sLine, sPath) Entonces CreateFolder = True
terminar si
Terminar si
Conjunto deFso = Nada
Función final
REM CLASE-TERMINAR
Subclase privada_Terminar
streamGet.Cerrar
Establecer streamGet = Nada
Subtítulo final
Fin de clase
método de llamada REM
Atenuar oSubir
Establecer oUpload = Nuevo SWFUpload
oUpload.SaveFolder = ruta de almacenamiento
oSubir.GetUploadData
Establecer oUpload = Nada
%>