diff --git a/src/main/java/org/codelibs/fess/helper/ViewHelper.java b/src/main/java/org/codelibs/fess/helper/ViewHelper.java index 4c2038603..cb8b95be4 100644 --- a/src/main/java/org/codelibs/fess/helper/ViewHelper.java +++ b/src/main/java/org/codelibs/fess/helper/ViewHelper.java @@ -25,9 +25,11 @@ import java.net.URLEncoder; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; import java.util.function.Function; @@ -78,6 +80,8 @@ import com.ibm.icu.text.SimpleDateFormat; public class ViewHelper { + private static final String CONTENT_DISPOSITION = "Content-Disposition"; + private static final String HL_CACHE = "hl_cache"; private static final String QUERIES = "queries"; @@ -135,6 +139,8 @@ public class ViewHelper { protected ActionHook actionHook = new ActionHook(); + private Set inlineMimeTypeSet = new HashSet<>(); + @PostConstruct public void init() { escapedHighlightPre = LaFunctions.h(originalHighlightTagPre); @@ -557,22 +563,31 @@ public class ViewHelper { logger.debug("userAgentType: " + userAgentType + ", charset: " + charset + ", name: " + name); } + final String contentDispositionType; + if (inlineMimeTypeSet.contains(responseData.getMimeType())) { + contentDispositionType = "inline"; + } else { + contentDispositionType = "attachment"; + } + switch (userAgentType) { case IE: - response.header("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(name, Constants.UTF_8) + "\""); + response.header(CONTENT_DISPOSITION, contentDispositionType + "; filename=\"" + URLEncoder.encode(name, Constants.UTF_8) + + "\""); break; case OPERA: - response.header("Content-Disposition", "attachment; filename*=utf-8'ja'" + URLEncoder.encode(name, Constants.UTF_8)); + response.header(CONTENT_DISPOSITION, + contentDispositionType + "; filename*=utf-8'ja'" + URLEncoder.encode(name, Constants.UTF_8)); break; case SAFARI: - response.header("Content-Disposition", "attachment; filename=\"" + name + "\""); + response.header(CONTENT_DISPOSITION, contentDispositionType + "; filename=\"" + name + "\""); break; case CHROME: case FIREFOX: case OTHER: default: - response.header("Content-Disposition", - "attachment; filename=\"=?utf-8?B?" + Base64Util.encode(name.getBytes(Constants.UTF_8)) + "?=\""); + response.header(CONTENT_DISPOSITION, + contentDispositionType + "; filename=\"=?utf-8?B?" + Base64Util.encode(name.getBytes(Constants.UTF_8)) + "?=\""); break; } } catch (final Exception e) { @@ -640,6 +655,10 @@ public class ViewHelper { return facetQueryViewList; } + public void addInlineMimeType(final String mimeType) { + inlineMimeTypeSet.add(mimeType); + } + public ActionHook getActionHook() { return actionHook; } diff --git a/src/main/resources/app.xml b/src/main/resources/app.xml index f3ddb452f..cf5268081 100644 --- a/src/main/resources/app.xml +++ b/src/main/resources/app.xml @@ -328,6 +328,9 @@ + + "application/pdf" +