<Form action=upload.asp method=post enctype=multipart/form-data>
Carregar arquivo:<Tipo de entrada=nome do arquivo=arquivo1><br>
<tipo de entrada=nome de envio=upload valor=upload>
</formulário>
Entre eles, o parâmetro enctype é usado para definir o método de codificação MIME do formulário. Ao fazer upload de um arquivo (ou contendo uma caixa de texto ao mesmo tempo), seu atributo deve ser definido como multipart/form-data. o arquivo binário do lado do servidor recebido. O programa ASP para processamento de fluxo será apresentado posteriormente neste artigo.
2. Análise do formato do arquivo de upload
Antes de processar o arquivo, devemos primeiro entender o formato específico do arquivo carregado. Podemos visualizar seu código binário escrevendo o seguinte programa ASP simples:
<%
filesize=Request.TotalBytes 'Obtém o tamanho do arquivo enviado
filedata=Request.BinaryRead(filesize) 'Obtém os dados binários do arquivo enviado
Response.BinaryWrite filedata 'Exibe dados binários no navegador
%>
Analisando o código binário do arquivo carregado exibido no navegador, descobrimos que o código consiste em quatro partes (se vários arquivos ou caixas de texto forem carregados ao mesmo tempo, os códigos são organizados na ordem de upload, com o mesmo formato ), e o conteúdo de cada parte é inserido usando Separado por caracteres de nova linha:
1) A primeira parte (bandeira inicial)
--------------------------7d329631b04d4
2) Parte 2 (Descrição do Documento)
Disposição do conteúdo: dados do formulário; nome do arquivo1; nome do arquivo = C:/Documentos e configurações/Administrador/Meus documentos/Invitation.doc Tipo de conteúdo: aplicativo/msword
Aqui podemos obter o nome do arquivo e o caminho absoluto do arquivo carregado, bem como o tipo de arquivo. Esta informação é essencial para salvar o arquivo corretamente.
3) Parte 3 (Conteúdo do Documento)
Ou seja, o conteúdo binário do arquivo omitido.
4) Parte 4 (marca final)
--------------------------7d329631b04d4
Combinando o conteúdo da primeira e quarta partes, -----------------------------7d329631b04d4 (o valor é diferente cada vez que é carregado ) Mesmo) desempenha o papel de um separador, que marca o início e o fim de um dado (quando há vários conteúdos carregados). Em termos das informações necessárias para salvar o arquivo, primeiro precisamos obter o nome do arquivo a partir do nome do arquivo da segunda parte dos dados, depois precisamos localizar corretamente a posição inicial do arquivo e, finalmente, usar a tecnologia ASP para salvar o arquivo binário com seu nome de arquivo original. Se vários conteúdos (como várias caixas de texto e arquivos) forem carregados ao mesmo tempo, eles serão processados da mesma maneira. Cada parte do conteúdo será incluída no delimitador, mas as caixas de texto e os arquivos serão expressos de maneiras ligeiramente diferentes. Isso pode ser feito analisando especificamente seu código binário para entender.
3. Use a tecnologia ASP para implementar o armazenamento de arquivos
Processamento do código do arquivo carregado
1) Obtenha o código delimitador
Da análise acima, já sabemos que os separadores desempenham um papel importante na divisão de vários segmentos de dados (incluindo caixas de texto e vários tipos de arquivos). Como foi analisado anteriormente, o separador aparece antes do primeiro símbolo de retorno de carro e avanço de linha. Portanto, o código delimitador pode ser obtido através do seguinte programa:
<%
newline=chrB(13) & chrB(10) 'nova linha representa o caractere de retorno de carro binário
filesize=Request.TotalBytes 'filesize é o tamanho do arquivo enviado
filedata=Request.BinaryRead(filesize) 'filedata são os dados binários do arquivo enviado
divider=leftB(filedata,clng(instrb(filedata,newline))-1) 'divisor é o divisor
%>
Nota: Como estamos lidando com bytecode binário aqui, todas as funções usam sua versão binária, com b adicionado.
2) Obtenha o conteúdo do arquivo (ou caixa de texto)
(1) Função preparatória (converter string binária em string)
O conteúdo do arquivo enviado não precisa passar pelo processo de conversão de binário para string e pode ser salvo diretamente. Porém, se precisar extrair o conteúdo da caixa de texto ou o nome do arquivo, você deverá realizar a conversão. Portanto, é necessário escrever uma função de conversão universal adequada para caracteres chineses. A seguir está o código da função:
Função BtoS (bstr)
Se não é nulo (bstr) então
para i = 0 para lenb(bstr) - 1
bchr = midb(bstr,i+1,1)
If ascb(bchr)>127 Then 'Os caracteres chineses são bytes duplos, então dois caracteres devem ser processados juntos
temperatura = temperatura&chr(ascw(midb(bstr, i+2, 1)&bchr))
eu = eu+1
Outro
temperatura = temperatura&chr(ascb(bchr))
Terminar se
próximo
Terminar se
BtoS=temperatura
Função final
(2) Obtenha o conteúdo do arquivo (ou caixa de texto)
Em aplicações WEB reais, a operação de upload pode envolver múltiplos conteúdos, como múltiplas caixas de texto, múltiplos arquivos, etc. Arquivos e caixas de texto são facilmente distinguidos. Os dados do arquivo contêm a string filename=. Portanto, escrevemos a seguinte função geral, que pode ser usada para extrair o conteúdo do arquivo e o conteúdo da caixa de texto (é necessária a conversão binária):
Função getdata(byval data, byval divider, final) 'data representa a string binária representa o separador final representa a posição final dos dados;
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) 'Representação binária da string filename=
bncrlf=chrb(13)&chrb(10) 'Caracter binário de retorno de carro
startpos = instrb(dados,divisor)+lenb(divisor)+lenb(bncrlf) 'Posição inicial
endpos = instrb(startpos,data, divisor)-lenb(bncrlf) 'Posição final
part1 = midb(data, startpos, endpos-startpos) 'Conteúdo entre dois separadores
firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' Parágrafo de descrição antes do conteúdo
If (instrb(firstline,filename)=0) Then 'Se for uma caixa de texto, obtém o conteúdo da string da caixa de texto
stem=midb(parte1,instrb(parte1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(parte1)-instrb(parte1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(stemp)
Else 'Se for um arquivo, obtém o conteúdo binário do arquivo
Getdata=midb (parte1, instrb (parte1, bncrlf&bncrlf)+lenb (bncrlf&bncrlf), lenb (parte1)
-instrb(parte1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
Terminar se
Final=pos finais
Função final
Chamando esta função diretamente no programa, você pode obter o conteúdo do arquivo (ou caixa de texto) desejado, conforme mostrado abaixo:
<%
Content=getdata (dados, divisor, posição)
%>
3) Obtenha o nome do arquivo
Como foi analisado anteriormente, o campo filename= do fluxo de dados do arquivo de upload contém o nome e o caminho absoluto do arquivo. De modo geral, precisamos apenas extrair o nome do arquivo no caminho. A seguir está o código do programa:
<%
namepos=instrrev(B2S(firstline),chr(92)) 'firstline são os dados da peça de descrição obtidos acima, chr(92)
expressar/
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) 'Obtém o nome do arquivo
%>
Use ASP para implementar diretamente a função de upload de arquivo
Os programadores ASP tradicionais só podem usar o objeto FILESYSTEMOBJECT para mover, copiar, excluir e outras operações em arquivos de texto (.txt). Se precisarem processar objetos binários, eles deverão usar os métodos apresentados anteriormente neste artigo. No entanto, agora o objeto ADO.STREAM em ASP pode operar objetos de texto e objetos binários ao mesmo tempo (pode ser baixado em http://www.microsoft.com/data) e você pode usá-lo para implementar diretamente o upload de arquivo função em ASP. Abaixo, apresentamos seu processo de implementação.
1) Abra o objeto STREAM
Para objetos SREAM, se desejar salvar o arquivo, você deverá salvar todo o conteúdo do objeto. Portanto, devemos criar dois (ou mais) objetos STREAM, um dos quais é o fluxo de dados de origem, que recebe os dados binários iniciais, o outro é o fluxo de dados de destino, que recebe os dados processados do fluxo de dados de origem, e finalmente; salve no arquivo desejado.
<%
set str=server.CreateObject(ADODB.Stream) 'str é o fluxo de dados de origem
str.Mode=3 'Defina o modo aberto, 3 é legível e gravável
str.Type=1 'Defina o tipo de dados, 1 são dados binários
str.Abrir
set desc=server.CreateObject(ADODB.Stream) 'desc é o fluxo de dados de destino
desc.Modo=3
Desc.Tipo=1
desc.Abrir
%>
2) Copiando conteúdo entre objetos STEAM
Nesta parte, você deve localizar o início do arquivo no fluxo de dados de origem e encontrar o comprimento do conteúdo do arquivo antes de poder copiar corretamente o arquivo para o fluxo de dados de destino e salvar o arquivo.
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata é todo o conteúdo enviado
str.Write formdata ' Fluxo de dados de origem de atribuição
str.position=count-lenb(result)-2 'a posição aponta para o início do arquivo
str.copyto desc, lenb(filecotent) 'lenb(filecontent) representa o comprimento do arquivo
desc.SaveToFile fullpath,2 'Salva o arquivo com o caminho e nome especificado por fullpath
%>
3) Feche o objeto STEAM
Terminada a programação, o objeto STEAM deve ser fechado e liberado da seguinte forma:
<%
Fechar
Definir desc = nada
Fechar
Definir STR = nada
%>
Resumir
Este artigo apresenta um método para implementar diretamente o upload de arquivos usando ASP, que tem sido bem aplicado no sistema de gerenciamento de informação desenvolvido por esta unidade. A prática provou que este método é mais simples e eficiente do que vários métodos tradicionais de upload de arquivos.