[Delphi Series] Fazendo Uploads de Arquivos via HTTP usando Delphi
Autor: Eliézer Pimentel | Publicado: 2009-05-29T21:14:00-03:00


Há alguns anos escrevi uma aplicação em Delphi que faz parte de um pacote de solução oferecida pela nossa empresa, a Plano Bê. Trata-se de um programa, chamado de Quick Index, usado para auxiliar na tarefa de indexação de documentos digitalizados pelos escaners de nossos clientes e na integração com nosso Sistema GED WEB.

O QI, como carinhosamente é chamado pelos usuários desta aplicação, acessa as informações no banco de dados do sistema WEB, através de requisições HTTP a uma página ASPX de nosso sistema GED WEB desenvolvido em VB.NET, para evitar a necessidade de instalação do client do banco de dados, configurar ODBC ou BDE, etc.

Acontece que, até então, a transferência dos arquivos digitalizados era meio que, como poderia chamar, meio rudimentar na minha opinião, pois usava um compartilhamento de pastas no servidor de GED e isso sempre trazia um problema ou outro quando o profissional de TI do cliente instalava o QI numa nova máquina com escaner, e não configurava corretamente as permissões de acesso, usuários, entre outras coisas.

Eu já não estava muito contente com esse tipo de funcionamento e já estava pensando em resolver de um modo diferente, quando fui procurado por um cliente que teria uma nova necessidade. Ele precisaria então digitalizar documentos remotamente, ou seja, em estações de trabalho fora de sua rede local, porém conectadas a Internet, detalhe: poderia ser até de outra cidade.

Foi o suficiente para pensar que está seria a chance de estudar uma mudança na maneira de subir estes arquivos para o servidor de GED. Pensei então em estudar uma forma de fazer um Upload destes arquivos para o servidor de GED usando HTTP mesmo, de forma que o QI pudesse estar em qualquer lugar, seja na rede local do cliente ou em uma estação externa conectada a Internet.


Cheguei pela manhã e comecei a estudar um componente que já usava no QI para acessar os dados do Sistema GED WEB, o idHTTP que fica localizado na paleta de componentes chamada Indy Clients.

Depois de encontrar algumas dicas em sites gringos, fiz um pequeno sample para testar o funcionamento do componente usando também um objeto da classe TIdMultiPartFormDataStream que funciona como um repositório onde coloco quais arquivos quero fazer o dito Upload usando o método POST do componente idHTTP.

Depois de pronto meu sample, pedi ajuda ao Jean, nosso analista WEB e perito em VB.NET, para que fizesse uma página ASPX que recebesse meus arquivos enviados pelo sample. Alguns minutos depois e voilá, estava funcionando nossos testes (claro depois de alguns pequenos enroscos).

Terminado meus testes, antes de partir para a execução da "cirurgia" no neu fonte do QI, resolvi que poderia contribuir também com a galera que desenvolve em Delphi e que assim como eu, também poderiam precisar de algo parecido. Criei logo um repositório no GitHub e subi meu sample pra lá, portanto, se você se interessar pelo sample, e precisar de algo parecido ou for apenas um curioso que gostaria de conhecer o código, clique ai no link e fique à vontade em implementar, modificar, sugerir e até mesmo criticar, ok?

Rapidamente, vou postar aqui um resumo dos códigos usados para o tal Upload, acompanhe ai e veja como é simples (Claro, o sample é mais completo):

formData := TIdMultiPartFormDataStream.Create;
formData.AddFile('Identificação do Arquivo', 'Nome do Arquivo para Upload', 'plain/text');
IdHTTP1.Request.Referer := 'URL da página ASPX que recebe o arquivo';
idHTTP1.Post('URL da página ASPX que recebe o arquivo', formData);


Obrigado pela leitura e fique à vontade em comentar o post e ajudar meu BLOG a ser mais útil.