javax.servlet.FilterChain在Firefox中将ContentType设置为text / plain

时间:2015-02-19 15:51:41

标签: java filter content-type

我不是100%克服Java或过滤器。接管一些代码,我们发现Firefox中的.ZIP(大写)文件呈现为text / plain。 .ZIP文件在IE中正确下载,但在Firefox中没有。 .zip(小写)在IE和Firefox中都能正确下载。

据我所知,web.xml指向Filter类。 在调用chain.doFilter的代码的关键时,我试图在chain.doFilter之前设置内容类型,然后检查doFilter之前和之后的内容类型。

这是代码:

LOG.debug("Current Content Type: " + response.getContentType());
response.setContentType("application/zip");
LOG.debug("New Content Type: " + response.getContentType());

chain.doFilter(request, response);

LOG.debug("Current Content Type2: " + response.getContentType());

这个输出如下(粗略地):

Current Content Type: null New Content Type: application/zip

<Some stuff where doFilter is called />

Current Content Type2: text/plain

在Firefox中,我将内容类型视为text / plain,因此我认为它的doFilter设置了内容类型。

我们无法更改扩展程序,因为这些文件来自外部来源,因此无法更改。

有关为什么会发生这种情况的指示,或者如何获取.ZIP文件以提示正确下载。

感谢。

1 个答案:

答案 0 :(得分:1)

doFilter()方法正在调用过滤器链中的下一个过滤器。

过滤器链是过滤器列表,因为它们在web.xml中定义。

因此,您的web.xml中可能有一个过滤器,它确实会更改内容类型。

但也许它更简单,在应用程序服务器的默认配置中查找mime映射,或者在web.xml中定义一个mime映射,看看是否有帮助:

<mime-mapping>
    <extension>ZIP</extension>
    <mime-type>application/zip</mime-type>
</mime-mapping>