Utilizar a tecnologia WEB para implementar um sistema de gestão com estrutura B/S (navegador/servidor) é a tendência de desenvolvimento da automação de escritório. Os sistemas de gestão baseados na tecnologia WEB desenvolveram-se rapidamente nos últimos anos porque têm um ciclo de desenvolvimento curto, são independentes de plataformas de utilizadores, são fáceis de implementar e podem recolher, processar e publicar informações de forma rápida e eficiente; A tecnologia ASP tornou-se gradualmente a ferramenta preferida para o desenvolvimento de sistemas de gestão devido à sua alta eficiência de desenvolvimento, boa interatividade e forte segurança.
Muitos aplicativos baseados na WEB envolvem operações de upload de arquivos. As tecnologias comuns de upload de arquivos incluem: baseadas no protocolo HTTP; baseadas em componentes de upload de arquivos desenvolvidos pela VB (ou DELPHI e outras linguagens de programação baseadas em tecnologia de banco de dados, etc.); Esses métodos geralmente exigem que os programadores dominem a tecnologia WEB, a tecnologia de banco de dados ou a tecnologia CGI ou a tecnologia de componentes ao mesmo tempo, e têm requisitos mais elevados para os programadores. O uso da tecnologia ASP para implementar diretamente a função de upload de arquivos que este artigo apresentará requer apenas que os programadores dominem uma única tecnologia ASP, o que reduz bastante a dificuldade de programação.
Comparação de várias tecnologias de upload de arquivos
1. Baseado no protocolo HTTP
Este método requer que os programadores usem software de terceiros, como DELPHI, VB, etc., para primeiro realizar a programação do protocolo HTTP no aplicativo e, em seguida, empacotar o conteúdo do arquivo para ser carregado no formato do protocolo HTTP e, finalmente, envia uma mensagem de solicitação de upload ao servidor WEB para realizar o upload do arquivo. Como DELPHI e VB não podem escrever programas de rede WEB completos e só podem escrever pequenos aplicativos WEB, este método é usado apenas para aplicativos de rede com funções limitadas.
2. Componente de upload de arquivos desenvolvido com base em VB (ou DELPHI, etc.)
Este método usa VB (ou linguagem de programação DELPHI, etc.) para desenvolver componentes de servidor ASP para implementar serviços específicos de upload de arquivos. Ele primeiro usa a função de formulário ASP para fazer upload de arquivos (formato binário) do cliente para o servidor e, em seguida, usa componentes desenvolvidos em VB para processar os arquivos binários em arquivos que podem ser lidos e gravados normalmente. Este método exige que os programadores não apenas dominem a linguagem ASP, mas também utilizem linguagens de terceiros, como VB, para programação de componentes, o que aumenta a dificuldade de desenvolvimento.
3.
Este método é semelhante ao método anterior baseado na tecnologia de banco de dados. A diferença está no processamento dos arquivos binários carregados. Ele usa um banco de dados para salvar arquivos binários. Tanto bancos de dados pequenos quanto bancos de dados grandes fornecem tipos de dados para armazenar dados binários. Basta armazenar os dados nos campos correspondentes no método Append Chunk. Embora este método seja simples e viável, pois o tamanho do arquivo carregado a cada vez é diferente, causará um grande desperdício de espaço no banco de dados e reduzirá a velocidade de acesso aos dados e o arquivo só poderá ser carregado no ambiente de acesso ao banco de dados; causando grandes transtornos.
Análise de exemplo
No entanto, usar a tecnologia ASP para implementar diretamente a função de upload de arquivo requer apenas que o programador domine uma única tecnologia ASP, o que
reduz bastante a dificuldade de programação. A seguir apresentaremos como usar este método através de um exemplo.
1. Formulário de upload de arquivo
Primeiro você precisa escrever um formulário que possa fornecer a função de upload de arquivo. O programa é o seguinte:
<Form action="upload.asp" method=post enctype="multipart/form-data">.
Carregar arquivo:<Tipo de entrada=nome do arquivo=arquivo1><br>
<input type=submit name=upload value="Upload">
</form>
Entre eles, o parâmetro enctype é usado para definir o método de codificação MIME do formulário. Ao enviar um arquivo (ou contendo uma caixa de texto), seu atributo deve ser definido como "multipart/form-data"; asp é o lado do servidor O programa ASP que processa o fluxo de arquivos binários recebidos 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
%>
Analise o código binário do arquivo enviado exibido no navegador e descubra que o código consiste em quatro partes (se vários arquivos ou caixas de texto forem carregados ao mesmo tempo, os códigos serão organizados na ordem de upload, com o mesmo formato), e o conteúdo de cada parte é separado por símbolos de retorno de carro e avanço de linha:
1) A primeira parte (marca inicial)
--------------------------7d329631b04d4
2) Parte 2 (Descrição do arquivo)
Disposição
do conteúdo: form-data;
, 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) A terceira parte (conteúdo do arquivo)
é o conteúdo binário do arquivo, omitido.
4) Parte 4 (marca final)
--------------------------7d329631b04d4
Vejamos o conteúdo da Parte 1 e da Parte 4, "-- -----------------------------------------7d329631b04d4" (o valor é diferente cada vez que você faz o upload) desempenha o papel de um separador, Ele marca o início e o fim de um dado (quando há vários uploads). 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
e fazer upload do processamento de código de arquivo
1) Obtenha o código delimitador
A partir da análise acima, já sabemos que o delimitador desempenha 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 todos os processos aqui são bytecodes binários, todas as funções usam suas versões binárias 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 carregado 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) Obter o conteúdo do arquivo (ou caixa de texto)
Em aplicações WEB reais, a operação de upload pode envolver vários conteúdos, como várias caixas de texto, vários 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 uma string binária que representa a divisão; símbolo 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) 'Binário da string "nome do arquivo" expresso
bncrlf=chrb(13)&chrb(10) 'Caractere 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
Chame esta função diretamente no programa para obter o conteúdo do arquivo (ou caixa de texto) desejado, conforme mostrado abaixo:
<%
Content=getdata (dados, divisor, posição)
%>
3) A obtenção do nome do arquivo já foi analisada anteriormente. O campo "filename=" do fluxo de dados do arquivo carregado 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). aqueles introduzidos anteriormente neste artigo para alcançar. 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 do arquivo função em ASP. Abaixo, apresentamos seu processo de implementação.
1) Abra o objeto STREAM
Para o objeto SREAM, se desejar salvar o arquivo, você deve 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 descobrir 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 O código do programa é o seguinte:
<%.
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata é todo o conteúdo enviado
str.Write formdata 'Atribuir fluxo de dados de origem
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) Fechar o objeto STEAM
Após a conclusão da programação, o objeto STEAM deverá ser fechado e liberado, conforme mostrado abaixo:
<%.
Fechar
Definir desc = nada
Fechar
Definir STR = nada
%>
Resumo
Este artigo apresenta um método para implementar diretamente o upload de arquivos usando ASP, que foi 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.