首页 > 解决方案 > 直接在 Internet Explorer 中打开下载时出现文件名问题

问题描述

我们有一个 Java Web 应用程序,它可以生成报告并将它们直接作为二进制响应提供服务。直到最近,我们才以这种方式生成 PDF 文件(由浏览器直接打开),但最近我们还添加了将报告生成为 XLS 文件的功能。当在“你想做什么”弹出框中选择“打开”时,这似乎在 Internet Explorer 中产生了问题。

提供报告的 ​​URL 的格式为“http://localhost:8080/ias/ReportsClientInterface?req=fetch&jobid=2352837_1609341332985”。我们设置的 MIME 类型是“application/vnd.ms-excel”,Content-Disposition 标头是“filename=[name].xls”,其中 [name] 可以根据报告的标题而有所不同。在 Internet Explorer(在 Windows 10 上运行的 11)中,浏览器显示“你想用 [文件名] 做什么?” 弹出。弹出窗口中的 [filename] 正确显示了 Content-Disposition 标头指定的文件名。如果选择“保存”,则为文件选择的名称也与该标题匹配。However, when "open" is selected, Excel shows ReportsClientInterface(在上面显示的 URL 中)作为名称,而不是预期的报告名称。更糟糕的是,如果我们让 Excel 保持打开状态并生成第二个报告,Excel 将拒绝打开它,因为第二个报告也尝试使用名称“ReportsClientInterface”打开。

有没有办法强制 IE/Excel 遵守标题中指定的文件名,这样就不会出现这个问题?

提前致谢。

标签: javaexcelinternet-explorermimecontent-disposition

解决方案


有没有办法强制 IE/Excel 遵守标题中指定的文件名,这样就不会出现这个问题?

改写你的问题:“有没有办法远程修复这个 IE11 错误”?

答案很明显但令人失望:当然,不,没有。

通常的解决方法是弄乱服务器的路由系统。你不希望 URL 是http://localhost:8080/ias/ReportsClientInterface?req=fetch&jobid=2352837_1609341332985,你希望它是http://localhost:8080/ias/report/descriptiveNameOfReport/[name].xls?jobid=2352837_1609341332985

请注意,作为更一般的说明,ReportsClientInterface在您的 URL 中包含非常难看,并且表明您通常在编写 Web 服务的路由部分上搞砸了。网址很重要。多加注意它们,不要接受任何导致这种混乱的路由系统(路由=运行以将 URL 绑定/ias/ReportsClientInterface到某个处理程序的进程,例如,您编写的 java 代码是为了响应这个.那叫'路由')。

我假设您正在使用自动路由系统,即您可能有一个名为的类ReportsClientInterface,并且现有的路由系统使用它来自动加载类。或者你有一些系统会产生例如将这个 URL 链接到你的类的 XML。

无论哪种方式,查看您拥有的 Web 框架并弄清楚如何控制路由,然后花点时间清点您公开的每个服务和页面,并为所有这些考虑一个不错的 URL 方案。然后实现这个。

每个 web 框架的路由都不同,所以在不知道你使用哪一个的情况下,我无法更详细地了解如何完成这项工作。


推荐阅读