我在 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/