Resumo: Em um ambiente de aplicações baseado em navegador/servidor, o upload de vários tipos de arquivos no navegador sempre foi um dos problemas que assola as aplicações de gerenciamento de arquivos dos usuários. Existem três mecanismos para upload de arquivos em HTTP: RFC1867, PUT e WebDAV. Um método de implementação comum é usar um novo tipo introduzido no RFC1867: objetos File e ADO Stream. Este artigo discute os métodos de upload e princípios de implementação acima e fornece exemplos de soluções específicas.
Palavras-chave: componente ASP objeto FILE
Atualmente, as aplicações baseadas no modelo navegador/servidor são mais populares. Quando os usuários precisam transferir arquivos para o servidor, um dos métodos comuns é executar um servidor FTP e definir o diretório FTP padrão de cada usuário como o diretório inicial da Web do usuário, para que o usuário possa executar o programa cliente FTP e fazer upload de arquivos para o servidor. diretório da Web especificado. Isso exige que os usuários saibam como usar o programa cliente FTP. Portanto, esta solução só é viável para usuários experientes e familiarizados com FTP. Se pudermos integrar a função de upload de arquivos com a Web para que os usuários possam concluir a tarefa de upload usando apenas um navegador da Web, será muito conveniente para eles. Porém, devido à limitação de que o objeto do sistema de arquivos só pode transmitir arquivos de texto, o maior problema do ASP é o upload de arquivos. A seguir descrevemos como fazer upload de arquivos em uma página da web baseada no protocolo HTTP.
um. Três mecanismos para upload via HTTP
Existem três mecanismos para upload via HTTP: RFC1867, PUT e WebDAV.
PUT é um novo verbo HTTP introduzido no HTTP 1.1. Quando o servidor web recebe um HTTP PUT e o nome do objeto, ele autentica o usuário, recebe o conteúdo do fluxo HTTP e o armazena diretamente no servidor web. Como isso pode atrapalhar um site, também perde a maior vantagem do HTTP: a programabilidade do servidor. No caso de PUT, o próprio servidor trata da solicitação: não há espaço para a intervenção de aplicativos CGI ou ASP. A única maneira de seu aplicativo capturar PUTs é operar em um nível baixo, a camada de filtragem ISAPI. Por razões correspondentes, a aplicação do PUT é muito limitada.
WebDAV permite autenticação distribuída e tradução de conteúdo da web. Ele apresenta vários novos verbos HTTP que permitem upload, bloqueio/desbloqueio e check-in/verificação de conteúdo da web por HTTP. "Salvar na Web" no Office 2000 é implementado através do WebDAV. Se tudo o que lhe interessa é enviar conteúdo, o WebDAV funciona muito bem e resolve muitos problemas. No entanto, se você precisar fazer upload de arquivos em seu aplicativo da web, o WebDAV não será útil para você. Assim como o HTTP PUT, esses verbos WebDAV são interpretados pelo servidor, não pela aplicação web. Você precisa trabalhar na camada de filtragem ISAPI para acessar esses verbos do WebDAV e interpretar o conteúdo da sua aplicação.
RFC1867 ( http://www.ietf.org/rfc/rfc1867.txt ) foi usado como padrão proposto antes de ser finalmente aceito pelo W3C em HTML3.2. É uma ideia muito simples, mas poderosa: definir um novo tipo em um campo de formulário.
<INPUT TYPE="FILE">
E adicionou diferentes esquemas de codificação ao próprio formulário, ao invés de usar o típico:
<FORM ACTION="formproc.asp" METHOD="POST">
mas usando:
<FORM ACTION="formproc .asp " METHOD="POST" ENCTYPE="multipart/form-data">
Este esquema de codificação é mais eficiente do que o esquema de codificação de formulário padrão "application/x-url-encoded" ao transmitir grandes quantidades de dados. A codificação de URL possui apenas um conjunto de caracteres muito limitado. Quaisquer caracteres que excedam o conjunto de caracteres devem ser substituídos por '%nn', onde nn representa os 2 dígitos hexadecimais correspondentes. Por exemplo, mesmo os caracteres de espaço comuns devem ser substituídos por '%20'. O RFC1867, por outro lado, usa codificação MIME de múltiplas partes, como comumente visto em mensagens de e-mail, para transmitir grandes quantidades de dados sem codificação, mas com apenas alguns cabeçalhos simples, mas úteis, envolvendo os dados. Os principais fabricantes de navegadores adotaram o botão "Navegar..." recomendado e os usuários podem facilmente usar a caixa de diálogo local "Abrir arquivo..." para selecionar os arquivos a serem carregados.
RFC1867 ainda deixa a maioria dos métodos flexíveis de upload de arquivos para seu aplicativo da web. PUT tem uso muito limitado. WebDAV é útil para autores de conteúdo, como usuários do FrontPage, mas é menos útil para desenvolvedores web que desejam incorporar uploads de arquivos em seus aplicativos web. Portanto, RFC1867 é a melhor maneira de incluir o upload de arquivos em aplicações web.
Em aplicações práticas, a Microsoft fornece Posting Acceptor gratuitamente. O ASP não entende o esquema de codificação "multipart/form-data". Em vez disso, a Microsoft fornece o Posting Acceptor, um aplicativo ISAPI que aceita um REPOST em uma página ASP após a conclusão do upload.
O SA-FileUp da Software Artisans foi um dos primeiros componentes comerciais do Active Server. Após diversas melhorias, agora existe como um componente ASP puro.
dois.
O princípio básicoda análise do princípio de implementação de upload de arquivo baseado em ASP
é: usar o método BinaryRead do objeto ADO Stream para ler todos os dados no FORM, interceptar os dados do arquivo necessários e salvá-los como um arquivo binário.
Aqui está um exemplo de página de upload de arquivo (upload.htm):
<html>
<corpo>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="arquivo" nome="Nome do arquivo">
<INPUT TYPE="Enviar" VALUE="Carregar"></TD>
</form>
</body>
</html>
O objeto arquivo é usado no programa, de modo que os dados originais lidos usando o método BinaryRead em Upload.asp não sejam apenas os dados do arquivo selecionado em si, mas também incluam o caminho, tipo e envio do arquivo no disco rígido do usuário Descrição do nome de domínio do formulário e outras informações relacionadas da página, para que possamos extrair o conteúdo específico do arquivo. De acordo com a análise, a linha divisória entre as informações do cabeçalho e os dados são dois pares de retornos de carro e avanços de linha, e também há informações de separação no final. Podemos obter os dados do arquivo usando um método semelhante ao seguinte.
Dim FormData.FormSize,DataStart,CLStr,DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
'4 é o comprimento de dois pares de caracteres de retorno de carro e avanço de linha
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData é o conteúdo do arquivo.
O processamento correspondente pode ser realizado conforme necessário. A última coisa a fazer é salvar o arquivo. Existem duas maneiras de salvar: uma é usar o método de operação de arquivo binário em programas como VB ou VC, adicionar a biblioteca de tipos apropriada ao projeto e, finalmente, compilá-lo em um arquivo DLL e, em seguida, registrar o arquivo DLL ao usar isto. . O procedimento de armazenamento de arquivos é o seguinte:
Função Pública SaveFile(Pathname As String) As String
Dim objContext As ObjectContext
Dim objRequest como solicitação
Definir objContext=GetObjectContext()
Definir objRequest=objContext("Solicitação")
'O seguinte trecho de código está relacionado às operações de armazenamento de arquivos Dim FormData() As Byte, CLStr, DivStr
Dim DataStart tão longo,DataSize tão longo
DataSize=objRequest.TotalBytes
Redimensionar FormData(DataSize-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) e ChrB(10)
DataStart=InStrB(FormData,CLStr e CLStr)+4
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
'Cria um arquivo binário e escreve FormData nele Open Pathname For Binary As 1
Coloque #1,,FormData
Fechar #1
SalvarArquivo = "OK!"
de End Function
é usar o método de operação de arquivo binário fornecido em ADO STREAM. A instrução para salvar o arquivo é: StreamOBJ.SaveToFile (fileName,2). Neste tipo de operação, podemos armazenar as operações relevantes em um arquivo de classe, e ao aplicá-lo, basta incluir o arquivo de classe diretamente no programa ASP. Para métodos de processamento específicos, consulte a introdução relevante.
três. A instância do método de implementação de upload de arquivo
pode usar método com ou sem componentes para implementar o upload de arquivo. Para categorias de componentes, por exemplo, Microsoft Posting Acceptor (abreviadamente MPA) é um componente de servidor gratuito lançado pela Microsoft. A instalação desse tipo de componente também é relativamente conveniente. Para o mpa da Microsoft, basta executar o arquivo de instalação. Para componentes DLL gerais, precisamos registrá-los. Por exemplo, para usar aspcnUP.dll, você só precisa executar regsvr32 [path]aspcnUP.dll no Windows 2000, e o sistema solicitará uma mensagem de registro bem-sucedido e você poderá usar o componente para classes sem componentes; como www.5xsoft.com Component upload class-upload_5xsoft. Ao usá-lo, basta incluir a seguinte instrução no manipulador:
<!--#include FILE="upload.inc"-->
Para as propriedades e métodos de operação relacionados à
criação de um objeto de upload
, consulte o manual do usuário deste componente.A seguir está o código fonte para upload de alguns tipos de arquivos (upload.asp), tomando como exemplo o componente aspcnUP.dll:
<% @ language="vbscript"
Definir fileUP=Server.CreateObject("aspcn.Upload")
arquivoUP.Maxsize=200000
arquivoUP.Path="d:upfile"
arquivoUP.Upload
Para i=0 para fileUP.Count
nomecampo=arquivoUP.NomeCampo(i)
Se fileUP.FileType(fieldname)="zip" Ou ileUP.FileType(fieldname)="rar" Então
fileUP.Save nome do campo
Terminar se
Próximo
Definir fileUP=Nada
%>
Quatro. Conclusão
O modelo de aplicativo navegador/servidor ainda está se desenvolvendo rapidamente no recém-lançado ASP da Microsoft. NET possui função de upload de arquivo integrada, que é muito simples e conveniente de usar. Como uma tecnologia totalmente nova, ASP. NET não é apenas uma simples atualização do ASP, é uma estrutura totalmente nova para desenvolvimento Web que contém muitos recursos novos. ASP. NET fornece código mais fácil de escrever e com uma estrutura mais clara. Usando esses códigos, iremos reutilizá-los e compartilhá-los com mais facilidade, desenvolvendo assim programas cada vez mais práticos.