Download de arquivo

É o seguinte…

tenho um servlet com o metodo doGet() para gerar um arquivo pdf. Isso funciona normalmente. O problema é o seguinte. Não consigo que o usuário faça download do arquivo pra máquina dele. Como posso fazer isso?

grato,
Scott

O que você tem que fazer é disponibilizar o caminho do PDF para o usuário, somente isso.

creio que não seja tão simples assim…

esse sistema está em jsf e tem phaselisteners por todos os lados…
disponibilizar o caminho não seria a melhor solução, sendo que por url, o faces-config.xml não deixa o usuário passar.

então o que fiz foi tentar fazer do seguinte modo…

[code] public void escreveArquivo(HttpServletRequest request, HttpServletResponse response){

    String filePath = "D:/Pessoas.pdf";
    String fileName = "Pessoas.pdf";
  try{
    FileInputStream fileToDownload = new FileInputStream(filePath);
    ServletOutputStream out = response.getOutputStream();

    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition","attachment; filename="+fileName);
    response.setContentLength(fileToDownload.available());

    int c;
    while((c=fileToDownload.read()) != -1){
    out.write(c);
    }
    out.flush();
    out.close();
    fileToDownload.close();
  } catch(Exception e){}
} [/code]

Ah, você tinha esquecido de falar esse pequeno detalhe. :roll:

Bem, também tinha essa maneira, apesar de não ser muito viável dependendo do seu contexto, mas assim dá certo também.

Agora o problema é outro…

quando vc copia pelo inputstream, o arquivo que é gerado não é exatamente igual ao primeiro, e o acrobat não consegue abrir…

qual serah o problema?

eu nao vejo nenhum…

Problema resolvido…
pdf gerando normal…
o problema é que eu setava no ServletContext, um requestDispatcher, e então o pdf era copiado com a página do requestDispatcher embutida. Assim, o pdf não começava com %pdf, não poderia ser lido pelo acrobat, nem teria o mesmo tamanho do arquivo original.