quarta-feira, 17 de outubro de 2012

Criando um fluxo para baixar um arquivo

Em algumas situações a função de download de arquivos disponibilizada pela API padrão do Maker não atende as nossas necessidades, uma das coisas que me incomoda muito é a mensagem exibida no momento do download e também a necessidade de manter o arquivo dentro do contexto para que o download possa acontecer.

O meu objetivo será mostrar o processo de criação de um fluxo que poderá efetuar o download de qualquer arquivo no servidor, podendo ele está ou não dentro do contexto da aplicação.

Utilizaremos para isso um fluxo do tipo web, que pode nos da um retorno a partir de sua requisição. Para que um fluxo possa ser definido como web é necessário clicar com o botão direito do mouse sobre ele e marcar a opção web. Lembro que para que um fluxo possa ser definido como web ele não deverá possui nenhum tipo de iteração, esse tipo de fluxo apenas irá receber os parâmetros necessários para sua execução  e retornar algo, sendo que o retorno não é algo obrigatório. Para este exemplo utilizarei um fluxo bem simples, como pode-se observar abaixo.


Podemos observar que o fluxo é muito simples. O segredo aqui está em acrescentar informações ao cabeçalho da requisição e isso é que vai indicar ao browser o comportamento que ele deverá tomar ao receber uma resposta para esta requisição, no caso desse exemplo utilizei a função "Resposta Web: Atribuir valor ao cabeçalho" nos dois últimos processamentos para incluir as seguintes informações:

1.  Content-Type: application/zip
2. Content-Disposition : attachment; filename="Arquivo.zip"

Isso fará com que o browser inicie o donwload ao receber a resposta da requisição.

A url para download do arquivo fica da seguinte maneira:

<Endereço do seu servidor>/<Nome do contexto da sua aplicação>/<Nome do seu fluxo web>.rule?sys=<Sigla do seu sistema>&caminho=<Caminho do arquivo no servidor>

Ex.: localhost:8080/webrun/BaixarArquivo.rule?sys=EXE?caminho=c:\teste.txt

Muito simples isso não é? O fluxo desse exemplo encontra-se em anexo neste post.

Até o próximo post.


Um comentário:

  1. Tentei fazer, mas ele dá sempre a mensagem Erro Interno do Servidor... já revisei tudo, e está tal-qual... o que poderá estar havendo!?

    ResponderExcluir