Disponibilizando um arquivo para download no JSF

0 respostas
Takeshi91

Método para disponibilizar um objeto do qual possa se obter uma binaryStream para download. Como um Blob, StreamedContent, etc.

public void exportFile(Blob binario, String filename) throws IOException {
        HttpServletResponse response = (HttpServletResponse)                                
        FacesContext.getCurrentInstance().getExternalContext().getResponse();
        ServletOutputStream outStream = response.getOutputStream();
        int b = 0;
        BufferedInputStream is = null;
        byte[] buf = null;
        try {
            is = new BufferedInputStream(binario.getBinaryStream());

            response.setCharacterEncoding("ISO-8859-1");
            response.setContentType("application/pdf"); // pode-se criar um metodo que retorne a ContentType dependendo da extensão do seu arquivo
            response.setContentLength((int) binario.length());
            System.out.println(binario.length());
            response.addHeader("Content-Disposition", "inline; filename=\"" + filename + "\"");
            response.addHeader("Cache-Control", "no-cache");
            buf = new byte[8192];
            while ((b = is.read(buf, 0, buf.length)) != -1) {
                outStream.write(buf, 0, b);
            }
            is.close();
            outStream.close();
            res.getOutputStream().close();
            FacesContext.getCurrentInstance().responseComplete();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }
Executando o método:
<p:commandButton action="#{documentoManagedBean.abreDocumento}" value="Abrir Documento"
                                 ajax="false" onclick="form.target='_blank'"/>
Criado 31 de março de 2011
Respostas 0
Participantes 1