problema: estou construindo uma aplicação que gera um arquivo em tempo de execução que o usuário deve baixar, no entanto não preciso manter tal arquivo salvo no servidor. Um colega meu de trabalho sugeriu alterar o header do Response para que o browser entenda que é um download e mandar o stream de bytes do arquivo direto pelo response. Se alguem souber como fazer isso, por favor poste.:roll:
Download sem gravar o arquivo em disco
5 Respostas
Bom, pelo que eu entendi você deseja enviar um arquivo, mas não quer criar fisicamente o arquivo onde ele estiver sendo processado. É isso mesmo?
se sim, acho que resolve o seu problema se você usar o método createTempFile(…) da classe File.
[]'s.
sim, o problema é exatamente este.
Teria algum exemplo da utilização desta classe ? E como aplicaria a questão do download? Já que é gerado um link para um arquivo físico. esta classe cria o arquivo fisicamente e depois apaga-o ? :?:
A idéia não é criar um arquivo físico (mesmo que temporário), e sim aproveitar a “OutputStream” que pode ser obtido do objeto Response para mandar o arquivo para o cliente. É só procurar por “response.getOutputStream” aqui mesmo no fórum para vários exemplos.
Como ja foi falado, use o response.getOutputStream e passe para ele o stream de bytes que seria o arquivo. Só não esqueça de, antes, indicar ao responde que enviará um stream de bytes e não texto, para garantir que será tratado do jeito correto.
fico grato pelas respostas, achei realmente bastante material aki no fórum, mas a verdade é que ainda não consegui fazer aparecer a janela de download do arquivo, no máximo apareceu o array de bytes na tela como texto… como alterei varias vezes as formatações do setContentType, setHeader e responseComplete, não vou postar o código.
Preciso enviar um arquivo de texto simples .txt ou de preferência .cbl já que se trata de um arquivo COBOL
sendo assim, se alguem puder postar um exemplo funcional em JSF, fico grato
…