Internet Explorer 9不使用文件名作为内联附件。

7

我在一个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”)。

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


在这个上下文中,“this does not work” 究竟是什么意思 - 你得到了什么名字?你尝试设置什么样的名称,能举个例子吗? - Pekka
尝试不要在文件名周围使用引号或单引号。 - Valamas
可能是https://dev59.com/mXVC5IYBdhLWcg3w51hv的重复问题。 - mjn
1个回答

13
那确实是IE的默认行为。它不会使用Content-Disposition头文件中的filename属性来准备Save As的默认文件名。相反,它使用请求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>

如果将其映射到URL模式/pdfservlet/*,则可以在servlet中动态地获取文件名部分(例如,查找所需的PDF文件和/或为更好的Web浏览器设置正确的filename)。

String filename = request.getPathInfo().substring(1); // foo.pdf

顺便说一下,这不管是内联提供还是作为附件提供都是一样的。


这适用于IE10+吗? - Jeremy Ray Brown
这似乎也适用于IE 11。 有没有不改变URL的解决方法? 当使用“attachment”作为下载类型时,它可以正常工作。 http://greenbytes.de/tech/tc2231/上的表格还表示内联在IE上失效。是否有一张包括IE10/11的表格? - rominator007
@rominator007:请看第一段为什么这样的解决方法是不可能的。 - BalusC
@BalusC 是的,我看过了。谢谢你。我只是想知道是否可以将IE 10+带到另一种行为,因为这个问题已经过时了。不幸的是,似乎并非如此。 :-( - rominator007
对于所有在C# / Asp.net中URL链接问题的人,请查看此链接:https://dev59.com/IWEi5IYBdhLWcg3wuuYk#21000255 - Astrophage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接