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úniorVamos 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 !!!