Disponibilizando um arquivo para download no JSF

2 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'"/>

2 Respostas

B

Tem um exemplo de servlet de download bem completo aqui: http://balusc.blogspot.com/2007/07/fileservlet.html

Eu recomendaria mesmo é usar um framework como o VRaptor que facilita todo esse trabalho: http://vraptor.caelum.com.br/documentacao/download-e-upload/

Takeshi91

é, estas frameworks me parecem ser eficientes, nem sabia que existiam frameworks para isso! .-.

de qualquer modo, ta ai um metodo bem util para quem nao quiser usar a framework ^^

Criado 31 de março de 2011
Ultima resposta 31 de mar. de 2011
Respostas 2
Participantes 2