Enviar arquivo PDF do servidor para o Browser

2 respostas
D

Boa tarde, galera!!
Seguinte: gero dinamicamente um arquivo pdf no servidor, e tenho que enviá-lo para o browser do cliente logo após sua geração, mas por algum motivo o mesmo está indo com apenas 1 byte, ao invés dos 21k.
Segue abaixo o código do método que eu uso para enviar o arquivo:

//Já recebe os bytes do arquivo 
    public static void escreveOutPutStream(ServletOutputStream outputStream,
        HttpServletResponse response, HttpServletRequest request,
        byte[] bytesRead) throws IOException, JRException {
        response.setContentType("application/pdf");
        response.setHeader("Expires", "0");
        response.setHeader("Cache-Control",
            "must-revalidate, post-check=0, pre-check=0");
        response.setHeader("Pragma", "public");
        response.setHeader("Content-Disposition",
            "attachment; filename=" + nomeRelatorioFinal);
        response.setContentLength(bytesRead.length);

       ServletOutputStream out = response.getOutputStream();
        out.write(bytesRead, 0, bytesRead.length);
        out.flush();
        out.close();

2 Respostas

R

bota uns debugs aí pra ver se os bytes do pdf tão vindo mesmo.

D

Valeu, Rafael, mas já consegui fazer o bicho funcionar… Era só enviar byte a byte…
Segue abaixo o método, caso alguém se interesse:

public static void enviarArquivo(HttpServletResponse response,
        HttpServletRequest request) throws ServletException, IOException {
        ServletOutputStream stream = null;
        BufferedInputStream buf = null;

        try {
            stream = response.getOutputStream();

            File pdf = new File(path + nomeRelatorio);
            response.setContentType("application/pdf");

            response.addHeader("Content-Disposition",
                "attachment; filename=" +
                nomeRelatorio);
            response.setContentLength((int) pdf.length());

            FileInputStream input = new FileInputStream(pdf);
            buf = new BufferedInputStream(input);

            int readBytes = 0;

            while ((readBytes = buf.read()) != -1)
                stream.write(readBytes);
        } catch (IOException ioe) {
            throw new ServletException(ioe.getMessage());
        } finally {
            if (stream != null) {
                stream.close();
            }

            if (buf != null) {
                buf.close();
            }
        }
    }
Criado 11 de abril de 2007
Ultima resposta 11 de abr. de 2007
Respostas 2
Participantes 2