internet-explorer - Internet Explorer 9 不为内嵌附件使用文件名

标签 internet-explorer servlets http-headers

我在 Servlet 中使用此代码来设置内联 PDF 文档的文件名:

response.setContentType("application/pdf");
response.setContentLength((int) file.length());
response.setHeader("Content-disposition", "inline; filename=\"" + file.getName() + "\"");

但是,这在 IE 9 中不起作用:“另存为...”对话框仅显示 URL 的最后一个路径部分,后跟“.pdf”(对于“/some/url/invoice”,它是“invoice.pdf” )

这是一个已知的错误?有解决方法吗?

最佳答案

这确实是 IE 的默认行为。它不使用 filename Content-Disposition 的属性header 以任何方式为另存为准备默认文件名。相反,它使用请求 URL 路径信息的最后一部分。

我建议以这样的方式重写您的 Servlet 和/或链接,以便将所需的文件名作为请求路径信息的一部分提供,而不是作为例如请求参数的一部分。

所以,而不是

<a href="/pdfservlet">View PDF</a>

或者
<a href="/pdfservlet?file=foo.pdf">View PDF</a>

你需要使用
<a href="/pdfservlet/foo.pdf">View PDF</a>

当映射到 /pdfservlet/* 的 URL 模式时,如有必要,您可以在 servlet 中动态获取文件名部分,如下所示(例如,定位所需的 PDF 文件和/或在标题中为更合适的网络浏览器设置正确的 filename):
String filename = request.getPathInfo().substring(1); // foo.pdf

顺便说一下,无论它是内嵌的还是作为附件提供的。

关于internet-explorer - Internet Explorer 9 不为内嵌附件使用文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8878656/

相关文章:

javascript - 为什么在 IE 中进行 setInterval div 替换后,我的容器会丢失其内容?

html - IE 和 HTML5 文档类型问题

java - 使用 servlet 中另一个搜索的结果搜索表

servlets - Glassfish javax.servlet servlet-api 2.5 版许可证?

ruby-on-rails - Rails 中的 Rspec 授权

http - 字符集名称在 HTTP 中区分大小写吗?

javascript - 如何在 IE 上找到流氓 Ajax 请求的来源?

javascript - .Html JQuery 在 IE 中不起作用

java - 如何在 Java 中解析 HTTP 请求?

tomcat - 如何将 POST 数据从 servlet 读取到 ZipStream?