Internet Explorer 9不使用内联附件的文件名

mjn*_*mjn 6 internet-explorer servlets http-headers

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

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

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

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

Bal*_*usC 11

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

我建议重写您的Servlet和/或链接,使得所需的文件名作为请求路径信息的一部分而不是例如请求参数提供.

所以,而不是

<a href="/pdfservlet">View PDF</a>
Run Code Online (Sandbox Code Playgroud)

要么

<a href="/pdfservlet?file=foo.pdf">View PDF</a>
Run Code Online (Sandbox Code Playgroud)

你需要使用

<a href="/pdfservlet/foo.pdf">View PDF</a>
Run Code Online (Sandbox Code Playgroud)

当映射到URL模式时/pdfservlet/*,您可以根据需要在servlet中动态获取文件名部分,如下所示(例如,找到所需的PDF文件和/或filename在标题中设置正确的Web浏览器):

String filename = request.getPathInfo().substring(1); // foo.pdf
Run Code Online (Sandbox Code Playgroud)

无论是内联服务还是附件服务,这都是顺便说一句.