Commit e720b343f5155075376b1ba76d90393ea5c22a78
1 parent
f9b2d89f
Exists in
master
Implementado recurso para instruir o browser a forçar um download do
conteúdo renderizado, através do comando "Content-Disposition" para colocar a instrução "attachment".
Showing
2 changed files
with
54 additions
and
6 deletions
Show diff stats
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/FileRendererImpl.java
| ... | ... | @@ -69,13 +69,15 @@ public class FileRendererImpl implements FileRenderer { |
| 69 | 69 | private FacesContext context; |
| 70 | 70 | |
| 71 | 71 | @Override |
| 72 | - public void render(final byte[] byteArray, final ContentType contentType, final String fileName) { | |
| 72 | + public void render(final byte[] byteArray, final ContentType contentType, final String fileName, boolean forceDownload) { | |
| 73 | 73 | logger.debug("Renderizando para o arquivo " + fileName + "."); |
| 74 | 74 | |
| 75 | 75 | try { |
| 76 | 76 | response.setContentType(contentType.getContentType()); |
| 77 | 77 | response.setContentLength(byteArray.length); |
| 78 | - response.setHeader("Content-Disposition", "filename=\"" + fileName + "\""); | |
| 78 | + | |
| 79 | + String forceDownloadCommand = forceDownload ? "attachment; " : ""; | |
| 80 | + response.setHeader("Content-Disposition", forceDownloadCommand + "filename=\"" + fileName + "\""); | |
| 79 | 81 | |
| 80 | 82 | logger.debug("Escrevendo o arquivo " + fileName + " no response."); |
| 81 | 83 | response.getOutputStream().write(byteArray, 0, byteArray.length); |
| ... | ... | @@ -87,23 +89,38 @@ public class FileRendererImpl implements FileRenderer { |
| 87 | 89 | } |
| 88 | 90 | context.responseComplete(); |
| 89 | 91 | } |
| 92 | + | |
| 93 | + @Override | |
| 94 | + public void render(final byte[] byteArray, final ContentType contentType, final String fileName) { | |
| 95 | + render(byteArray, contentType, fileName, false); | |
| 96 | + } | |
| 90 | 97 | |
| 91 | 98 | @Override |
| 92 | - public void render(final InputStream stream, final ContentType contentType, final String fileName) { | |
| 99 | + public void render(final InputStream stream, final ContentType contentType, final String fileName, boolean forceDownload) { | |
| 93 | 100 | logger.debug("Renderizando o arquivo " + fileName + "."); |
| 94 | - render(getBytes(stream), contentType, fileName); | |
| 101 | + render(getBytes(stream), contentType, fileName, forceDownload); | |
| 102 | + } | |
| 103 | + | |
| 104 | + @Override | |
| 105 | + public void render(final InputStream stream, final ContentType contentType, final String fileName) { | |
| 106 | + render(stream, contentType, fileName, false); | |
| 95 | 107 | } |
| 96 | 108 | |
| 97 | 109 | @Override |
| 98 | - public void render(File file, ContentType contentType, String fileName) { | |
| 110 | + public void render(File file, ContentType contentType, String fileName, boolean forceDownload) { | |
| 99 | 111 | logger.debug("Renderizando para o arquivo " + fileName + "."); |
| 100 | 112 | try { |
| 101 | - render(new FileInputStream(file), contentType, fileName); | |
| 113 | + render(new FileInputStream(file), contentType, fileName, forceDownload); | |
| 102 | 114 | } catch (FileNotFoundException e) { |
| 103 | 115 | logger.info("Erro na geração do relatório. Incluíndo a exceção de erro em um FacesMessage", e); |
| 104 | 116 | Faces.addMessage(e); |
| 105 | 117 | } |
| 106 | 118 | } |
| 119 | + | |
| 120 | + @Override | |
| 121 | + public void render(File file, ContentType contentType, String fileName) { | |
| 122 | + render(file, contentType, fileName, false); | |
| 123 | + } | |
| 107 | 124 | |
| 108 | 125 | private byte[] getBytes(InputStream stream) { |
| 109 | 126 | byte[] byteArray = null; | ... | ... |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/util/FileRenderer.java
| ... | ... | @@ -53,6 +53,17 @@ public interface FileRenderer extends Serializable { |
| 53 | 53 | * @param byteArray Byte Array to be rendered. |
| 54 | 54 | * @param contentType |
| 55 | 55 | * @param fileName |
| 56 | + * @param forceDownload If true, will force a download from the browser, otherwise the browser is free to determine what will happen with the rendered content. | |
| 57 | + */ | |
| 58 | + void render(final byte[] byteArray, final ContentType contentType, final String fileName, boolean forceDownload); | |
| 59 | + | |
| 60 | + /** | |
| 61 | + * Renders a byteArray for display to the user. | |
| 62 | + * | |
| 63 | + * @param byteArray Byte Array to be rendered. | |
| 64 | + * @param contentType | |
| 65 | + * @param fileName | |
| 66 | + * | |
| 56 | 67 | */ |
| 57 | 68 | void render(final byte[] byteArray, final ContentType contentType, final String fileName); |
| 58 | 69 | |
| ... | ... | @@ -64,6 +75,16 @@ public interface FileRenderer extends Serializable { |
| 64 | 75 | * @param fileName |
| 65 | 76 | */ |
| 66 | 77 | void render(final InputStream stream, final ContentType contentType, final String fileName); |
| 78 | + | |
| 79 | + /** | |
| 80 | + * Renders an inputStream for display to the user. | |
| 81 | + * | |
| 82 | + * @param stream | |
| 83 | + * @param contentType | |
| 84 | + * @param fileName | |
| 85 | + * @param forceDownload If true, will force a download from the browser, otherwise the browser is free to determine what will happen with the rendered content. | |
| 86 | + */ | |
| 87 | + void render(final InputStream stream, final ContentType contentType, final String fileName, boolean forceDownload); | |
| 67 | 88 | |
| 68 | 89 | /** |
| 69 | 90 | * Renders a file for display to the user. |
| ... | ... | @@ -73,6 +94,16 @@ public interface FileRenderer extends Serializable { |
| 73 | 94 | * @param fileName |
| 74 | 95 | */ |
| 75 | 96 | void render(final File file, final ContentType contentType, final String fileName); |
| 97 | + | |
| 98 | + /** | |
| 99 | + * Renders a file for display to the user. | |
| 100 | + * | |
| 101 | + * @param file | |
| 102 | + * @param contentType | |
| 103 | + * @param fileName | |
| 104 | + * @param forceDownload If true, will force a download from the browser, otherwise the browser is free to determine what will happen with the rendered content. | |
| 105 | + */ | |
| 106 | + void render(final File file, final ContentType contentType, final String fileName, boolean forceDownload); | |
| 76 | 107 | |
| 77 | 108 | /** |
| 78 | 109 | * File content type. | ... | ... |