protected void configureResponse(ExternalContext externalContext, String filename) { externalContext.setResponseContentType("text/xml"); externalContext.setResponseHeader("Expires", "0"); externalContext.setResponseHeader( "Cache-Control", "must-revalidate, post-check=0, pre-check=0"); externalContext.setResponseHeader("Pragma", "public"); externalContext.setResponseHeader( "Content-disposition", "attachment;filename=" + filename + ".xml"); externalContext.addResponseCookie( Constants.DOWNLOAD_COOKIE, "true", new HashMap<String, Object>()); }
/** * Crea un archivo para que pueda ser descargado en el navegador, debe previamente existir el path * de archivo * * @param path */ public void crearArchivo(String path) { FacesContext facesContext = FacesContext.getCurrentInstance(); StreamedContent content; InputStream stream = null; try { if (path.startsWith("/")) { stream = ((ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext()) .getResourceAsStream(path); } else { stream = new FileInputStream(path); } } catch (Exception e) { crearError("No se puede generar el archivo path: " + path, "crearArchivo()", e); } if (stream == null) { return; } content = new DefaultStreamedContent(stream); if (content == null) { return; } ExternalContext externalContext = facesContext.getExternalContext(); String contentDispositionValue = "attachment"; try { externalContext.setResponseContentType(content.getContentType()); externalContext.setResponseHeader( "Content-Disposition", contentDispositionValue + ";filename=\"" + path.substring(path.lastIndexOf("/") + 1) + "\""); externalContext.addResponseCookie( Constants.DOWNLOAD_COOKIE, "true", new HashMap<String, Object>()); byte[] buffer = new byte[2048]; int length; InputStream inputStream = content.getStream(); OutputStream outputStream = externalContext.getResponseOutputStream(); while ((length = (inputStream.read(buffer))) != -1) { outputStream.write(buffer, 0, length); } externalContext.setResponseStatus(200); externalContext.responseFlushBuffer(); content.getStream().close(); facesContext.getApplication().getStateManager().saveView(facesContext); facesContext.responseComplete(); } catch (Exception e) { crearError("No se puede descargar : path: " + path, "crearArchivo()", e); } }