O componente de upload SWFUpload foi originalmente desenvolvido por Vinterwebb.se. O corpo principal do componente é integrado com Flash e JavaScript. Ele é dedicado principalmente a resolver o problema de upload de vários arquivos e arquivos grandes. para facilitar a chamada por desenvolvedores da web, você pode controlar facilmente o estilo e obter o efeito de upload desejado por meio de js e css. Mas talvez à medida que o ASP desaparece gradualmente do desenvolvimento web, o oficial fornece apenas programas de processamento de upload para .net, php e outras versões. Para desenvolvedores ASP, eles precisam lidar sozinhos com a recepção de dados no lado do servidor.
Quando tive contato com este componente pela primeira vez, fui atraído por suas funções poderosas, flexibilidade e conveniência. Como o projeto era desenvolvido em ASP naquela época, o Baidu descobriu, após algumas pesquisas, que não havia nenhum programa útil de processamento de upload de ASP (agora). existem muitos ^^), então parecia que eu só poderia fazer isso sozinho. Pesquisa e desenvolvimento Inicialmente, o método de processamento de uploads comuns foi usado para interceptar dados de arquivos. os dados do arquivo passados pelo componente. , não tive escolha a não ser começar a analisar o formato dos dados enviados. Por meio da análise, descobri que o formato dos dados enviados ainda era um pouco diferente dos uploads comuns. Tanto as imagens quanto os arquivos foram enviados ao servidor no formato de fluxo de octeto. entendi a formatação, o resto é interceptar. Vou compartilhar meu método de processamento com os amigos que precisam.
Copie o código do código da seguinte forma:
<%
Classe SWUpload
Formulário privadoData, folderPath, streamGet
FileSize privado, chunkSize, bofCont, eofCont
CLASSE REM-INICIALIZAR
Subclasse Privada_Initialize
CallInitVariante
Servidor.ScriptTimeOut = 1800
Definir streamGet = Server.CreateObject(ADODB.Stream)
sAutor = 51JS.COM-ZMM
sVersion = Carregar Classe 1.0
Finalizar sub
CLASSE REM-INICIALIZAR
Propriedade pública Let SaveFolder(byVal sFolder)
Se Certo(sFolder, 1) = / Então
folderPath = sFolder
Outro
folderPath = sFolder & /
Terminar se
Fim da propriedade
Propriedade Pública Obter SaveFolder
SaveFolder = caminhodapasta
Fim da propriedade
Função privada InitVariant
tamanho do pedaço = 1024 * 128
folderPath = /: fileSize = 1024 * 10
bofCont = StrToByte(fluxo de octeto & vbCrlf & vbCrlf)
eofCont = StrToByte(vbCrlf & String(12, -))
Função final
Função pública GetUploadData
Dim curRead : curRead = 0
Dim dataLen: dataLen = Request.TotalBytes
streamGet.Type = 1: streamGet.Open
Faça enquanto curRead <dataLen
Dim partLen : partLen = chunkSize
Se partLen + curRead > dataLen Então partLen = dataLen - curRead
streamGet.Write Request.BinaryRead(partLen)
curRead = curRead + partLen
Laço
streamGet.Position = 0
formData = streamGet.Read(dataLen)
Chame GetUploadFile
Função final
Função Pública GetUploadFile
Dim begMark : begMark = StrToByte(nomedoarquivo=)
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)
Chame SaveUploadFile(cntName, begFile, endFile - begFile)
Função final
Função pública SaveUploadFile(byVal fName, byVal bCont, byVal sLen)
Dim filePath: filePath = Server.MapPath(fName)
Se CreateFolder(|, GetParentFolder(filePath)) Então
streamGet.Position = bCont
Definir streamPut = Server.CreateObject(ADODB.Stream)
streamPut.Type = 1: streamPut.Mode = 3: streamPut.Open
streamPut.Write streamGet.Read(sLen)
streamPut.SaveToFile caminho do arquivo, 2
streamPut.Close: Definir streamPut = Nada
Terminar se
Função final
Função privada IsNothing (byVal sVar)
IsNothing = IsNull(sVar) Ou (sVar = Vazio)
Função final
Função privada StrToByte (byVal sText)
Para i = 1 para Len(sText)
StrToByte = StrToByte & ChrB(Asc(Mid(sText, i, 1)))
Próximo
Função final
Função privada ByteToStr(byVal sByte)
Escurecer streamTmp
Definir 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.Fechar
Definir streamTmp = Nada
Função final
Função privada GetClientName (byVal bInfo)
Dim sInfo, regEx
sInfo = ByteToStr(bInfo)
Se IsNothing(sInfo) então
ObterNomeCliente =
Outro
Definir regEx = Novo RegExp
regEx.Pattern = ^.*//([^//]+)$
regEx.Global = Falso
regEx.IgnoreCase = Verdadeiro
GetClientName = regEx.Replace(sInfo, $1)
Definir regEx = Nada
Terminar se
Função final
Função privada GetParentFolder (byVal sPath)
Escurecer regEx
Definir regEx = Novo RegExp
regEx.Pattern = ^(.*)//[^//]*$
regEx.Global = Verdadeiro
regEx.IgnoreCase = Verdadeiro
GetParentFolder = regEx.Replace(sPath, $1)
Definir regEx = Nada
Função final
Função privada CreateFolder(byVal sLine, byVal sPath)
fO
Definir oFso = Server.CreateObject(Scripting.FileSystemObject)
Se não for oFso.FolderExists(sPath) então
Escurecer regEx
Definir regEx = Novo RegExp
regEx.Pattern = ^(.*)//([^//]*)$
regEx.Global = Falso
regEx.IgnoreCase = Verdadeiro
sLine = sLine & regEx.Replace(sPath, $2) & |
sPath = regEx.Replace(sPath, $1)
Se CreateFolder(sLine, sPath) então CreateFolder = True
Definir regEx = Nada
Outro
Se sLinha = |
CriarPasta = Verdadeiro
Outro
Dim Temp : sTemp = Mid(sLine, 2, Len(sLine) - 2)
Se InStrRev(sTemp, |) = 0 Então
sLinha = |
sPath = sPath &/& sTemp
Outro
Pasta Dim: Pasta = Mid(sTemp, InStrRev(sTemp, |) + 1)
sLine = | & Mid(sTemp, 1, InStrRev(sTemp, |) - 1) & |
sPath = sPath &/& Pasta
Terminar se
oFso.CreateFolder caminho
Se CreateFolder(sLine, sPath) então CreateFolder = True
Terminar se
Terminar se
Definir oFso = Nada
Função final
CLASSE REM-TERMINADO
Subclasse Privada_Terminate
streamGet.Fechar
Definir streamGet = Nada
Finalizar sub
Fim da aula
Método de chamada REM
Dim oUpload
Definir oUpload = Novo SWFUpload
oUpload.SaveFolder = caminho de armazenamento
oUpload.GetUploadData
Definir oUpload = Nada
%>