Desenvolvimento - ASP

Garimpando Componentes - Upload de arquivos

Vamos conhecer agora um outro componente gratuito bastante completo e útil para determinados tipos de projeto, ele se chama aspSmartUpload. Você pode baixá-lo em http://www.aspSmart.com, ou clicando aqui e salvando para o seu computador o arquivo Zip que contém as Dlls e vasta documentação com exemplos para o uso do componente...

por Eraldo Júnior



Vamos conhecer agora um outro componente gratuito bastante completo e útil para determinados tipos de projeto, ele se chama aspSmartUpload. Você pode baixá-lo em http://www.aspsmart.com/, ou clicando aqui e salvando para o seu computador o arquivo Zip que contém as Dlls e vasta documentação com exemplos para o uso do componente.

Este componente deve ser usado quando uma aplicação Web precisa transferir arquivos do computador do usuário para o computador da própria aplicação. Algo semelhante ocorre com os programas de FTP, só que no caso de uma aplicação Web o componente vai usar o próprio protocolo Http para a transfência dos arquivos.

O primeiro passo é portanto instalar as Dlls do aspSmartUpload no Servidor Web que vai rodar a sua aplicação. Em geral cada provedor terá um componente diferente para o trabalho de upload de arquivos via protocolo http, no entanto, todos usam os mesmos princípios e são muito parecidos.

Vamos imaginar um exemplo de aplicação que use este tipo de componente. Imagine que você deve escrever uma aplicação que guarde as informações cadastrais de uma pessoa - nome, telefone, endereço, e além disso, uma foto desta pessoa. O usuário estará usando o seu Browser predileto e além de preencher um formulário de dados básico deve também indicar um arquivo com a sua foto. Este arquivo deve ser copiado da máquina cliente do usuário para o Servidor da nossa aplicação para que possa ser compartilhado com outros usuários.

Vamos começar a nossa solução para a aplicação exemplo dividindo o problema em duas partes :

  • O formulário Html que vai rodar no Browser de um usuário.
  • O script Asp do Servidor que vai receber as informações do formulário HMTL, processando-as conforme nossos objetivos.

Segue abaixo o formulário em HTML. Ele não é tão trivial quanto parece, é um formulário especial para envio de arquivos via protocolo http, com uma diferença fundamental para que o mecanismo funcione, a tag deve ter o seguinte atributo declarado: ENCTYPE="multipart/form-data". Este atributo informa ao Browser que as informações irão para o Servidor em formato binário, portanto compatível com qualquer tipo de arquivo que você deseje trabalhar. Ou seja, a sua tag deve ser parecida com a que segue abaixo:

Listagem 1: Tag form

<FORM METHOD="POST" ACTION="processa.asp" ENCTYPE="multipart/form-data">

É importante ressaltar que o método deve ser sempre POST, porque o método GET só pode transferir até cerca de 1000 caracteres, o que é muito pouco quando trabalhamos com imagens.

Os controles abaixo são absolutamente normais:

Nome : <input type="text" name="nome"><br>
Telefone: <input type="text" name="telefone"><br>
Endereço : <input type="text" name="endereco"><br>

O próximo controle já não é tão usado assim. O type="file" coloca um botão Browse na tela. Quando clicado ele abre uma janela "Abrir" no padrão Windows. O usuário poderá então escolher qualquer arquivo da máquina. Dentro do campo "foto" é colocado o caminho completo (path) do arquivo escolhido.

Listagem 2: Campo foto

Foto : <input type="file" name="foto"> <br>
<input type="submit" value="Gravar">
</form>

Quando o usuário submeter este Formulário as informações serão enviadas para o Servidor em formato binário dentro do header Http. Vamos agora escrever o programa em ASP que vai processar estas informações, resolvendo a segunda parte do nosso problema.

Listagem 3:

" este programa recebe infomações binárias de um formulário.
server.scripttimeout=10000 
" é importante setar esta propriedade para um valor alto porque pode demorar um bom tempo para as informações trafegarem pela Internet entre o computador cliente e o computador Servidor. Como o ASP tem um tempo máximo para processar um Script, caso esta propriedade esteja baixa você corre o risco de ter um erro de Script Time Out na tela.
On Error Resume Next
Set mySmartUpload = Server.CreateObject("aspSmartUpload.SmartUpload") 
" instanciando o componente aspSmartUpload.SmartUpload e setando algumas propriedades muito importantes:
" a propriedade abaixo indica que o componente só deve aceitar arquivos com as terminações indicadas. Isso é muito importante, do contrário um usuário malicioso poderia subir um script que apaga todos os arquivos de um HD e executá-lo no Servidor com resultados desastrosos como você pode imaginar. Impedir a entrada de arquivos BMP é outra boa idéia, eles são imensos e podem esgotar rapidamente o espaço de um HD.
mySmartUpload.AllowedFilesList = "jpg,gif"
" esta propriedade indica que cada arquivo deve ter no máximo 8000 bytes. 
mySmartUpload.MaxFileSize = 8000
" esta propriedade indica que a soma dos arquivos deste upload não deve ultrapassar 50000. 
mySmartUpload.TotalMaxFileSize = 50000
" executa o upload 
mySmartUpload.Upload
" vamos agora escrever na tela as informações recebidas do Formulário
response.write(mySmartUpload.form("nome"))
response.write(mySmartUpload.form("telefone"))
response.write(mySmartUpload.form("endereco"))
" repare que não estamos usando o Objeto Request para acessar as informações de um formulário. Como as informações estão em formato binário, devemos usar o componente AspSmartUpload e seu método chamado FORM.
" tratando a foto do Formulário
For each file In mySmartUpload.Files
If not file.IsMissing Then
file.SaveAs("/pessoas/fotos/" & file.FileName)
End If
Next
" o loop acima percorrerá todos os controles do tipo File, no nosso exemplo apenas um chamado "foto". O método SaveAs colocará o arquivo na pasta "/pessoas/fotos/" do Servidor.
" tratando eventuais erros
If Err.number>0 Then
Response.Write("<p><br><br>Um dos seguintes erros aconteceu: você tentou subir um arquivo cuja terminação não é GIF nem JPG. Ou então a imagem que você subiu é maior que 8.000 bytes(8 kb. ). A operação foi cancelada. Por favor tente de novo. ")
response.end
End If
" fim do programa.

Vale a pena estudar com mais profundidade a documentação do componente aspSmartUpload. É possível colocar fotos em campos binários de um Banco de Dados entre outras mágicas mais.

Abraços e boa programação !!!

Eraldo Júnior

Eraldo Júnior - Programador há mais de 10 anos, trabalha com desenvolvimento Web há 5 anos, tendo participado como consultor de projetos para as seguintes empresas: Embratel, Rede Globo e Maria Bonita Confecções. Atualmente é o programador do site Ti Master e consultor em projetos Web da empresa Infodream, http://www.infodream.com.br