diff options
author | Leif Åstrand <leif@vaadin.com> | 2015-03-06 09:09:27 +0000 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2015-03-06 09:17:53 +0000 |
commit | 4db0b55aefd83d149e62a7fad2b14fb232d976c8 (patch) | |
tree | f2b90e7bf6c7df843a34f244d94d56c8ed74ab28 /server | |
parent | 69db9eac8f76a66210b8eb7308c9e5fc84eff977 (diff) | |
download | vaadin-framework-4db0b55aefd83d149e62a7fad2b14fb232d976c8.tar.gz vaadin-framework-4db0b55aefd83d149e62a7fad2b14fb232d976c8.zip |
Revert "Encode filenames to UTF-8 in Content-Disposition header. (#16556)"
Breaks AppResource404, BrowserFrameIsVisible and FlashIsVisible
This reverts commit af6dd56e89db8ea8c88f607c4214abcde50dfc94.
Change-Id: I82fc9ef4c9d08dc8aa48e0fa137fae5782701389
Diffstat (limited to 'server')
-rw-r--r-- | server/src/com/vaadin/server/DownloadStream.java | 30 | ||||
-rw-r--r-- | server/src/com/vaadin/server/FileDownloader.java | 6 | ||||
-rw-r--r-- | server/tests/src/com/vaadin/server/FileDownloaderTests.java | 41 |
3 files changed, 16 insertions, 61 deletions
diff --git a/server/src/com/vaadin/server/DownloadStream.java b/server/src/com/vaadin/server/DownloadStream.java index 8b2b933bcc..681c438967 100644 --- a/server/src/com/vaadin/server/DownloadStream.java +++ b/server/src/com/vaadin/server/DownloadStream.java @@ -20,8 +20,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -282,9 +280,16 @@ public class DownloadStream implements Serializable { } } - // Content-Disposition: attachment generally forces download - response.setHeader("Content-Disposition", - getContentDispositionValue()); + // suggest local filename from DownloadStream if + // Content-Disposition + // not explicitly set + String contentDispositionValue = getParameter("Content-Disposition"); + if (contentDispositionValue == null) { + contentDispositionValue = "filename=\"" + getFileName() + + "\""; + response.setHeader("Content-Disposition", + contentDispositionValue); + } int bufferSize = getBufferSize(); if (bufferSize <= 0 || bufferSize > Constants.MAX_BUFFER_SIZE) { @@ -312,21 +317,6 @@ public class DownloadStream implements Serializable { } } - private String getContentDispositionValue() - throws UnsupportedEncodingException { - String contentDispositionValue = getParameter("Content-Disposition"); - - if (contentDispositionValue == null) { - String encodedFilename = URLEncoder.encode(getFileName(), "utf-8"); - - contentDispositionValue = String.format( - "attachment; filename=\"%s\"; filename*=utf-8''%s", - encodedFilename, encodedFilename); - } - - return contentDispositionValue; - } - /** * Helper method that tries to close an output stream and ignores any * exceptions. diff --git a/server/src/com/vaadin/server/FileDownloader.java b/server/src/com/vaadin/server/FileDownloader.java index bea9922c50..42c2f76e1a 100644 --- a/server/src/com/vaadin/server/FileDownloader.java +++ b/server/src/com/vaadin/server/FileDownloader.java @@ -141,6 +141,12 @@ public class FileDownloader extends AbstractExtension { } stream = ((ConnectorResource) resource).getStream(); + if (stream.getParameter("Content-Disposition") == null) { + // Content-Disposition: attachment generally forces download + stream.setParameter("Content-Disposition", + "attachment; filename=\"" + stream.getFileName() + "\""); + } + // Content-Type to block eager browser plug-ins from hijacking // the file if (isOverrideContentType()) { diff --git a/server/tests/src/com/vaadin/server/FileDownloaderTests.java b/server/tests/src/com/vaadin/server/FileDownloaderTests.java deleted file mode 100644 index 4e9478c570..0000000000 --- a/server/tests/src/com/vaadin/server/FileDownloaderTests.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.vaadin.server; - -import static org.mockito.Matchers.contains; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URLEncoder; - -import org.junit.Before; -import org.junit.Test; - -public class FileDownloaderTests { - private String filename = "日本語.png"; - private DownloadStream stream; - - @Before - public void setup() { - stream = new DownloadStream(mock(InputStream.class), "", filename); - } - - @Test - public void contentDispositionFilenameIsUtf8Encoded() throws IOException { - VaadinResponse response = mock(VaadinResponse.class); - - stream.writeResponse(mock(VaadinRequest.class), response); - - verify(response).setHeader(eq("Content-Disposition"), - contains("attachment;")); - String encodedFileName = URLEncoder.encode(filename, "utf-8"); - verify(response).setHeader(eq("Content-Disposition"), - contains(String.format("filename=\"%s\";", encodedFileName))); - verify(response) - .setHeader( - eq("Content-Disposition"), - contains(String.format("filename*=utf-8''%s", - encodedFileName))); - } -} |