在internet explorer中直接打开下载时出现文件名问题

hc2pp10m  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(352)

我们有一个javaweb应用程序,它生成报告并将它们直接作为二进制响应。直到最近,我们还只是以这种方式生成pdf文件(由浏览器直接打开),但最近我们还添加了以xls文件的形式生成报告的功能。在“what do you want to do”(您想做什么)弹出框中选择“open”(打开)时,这似乎会在internet explorer中产生问题。
为报表提供服务的url的格式为“http://localhost:8080/ias/reportsclientinterface?req=fetch&jobid=23528371609341332985“。我们正在设置的mime类型是“application/vnd.ms excel”,内容配置头是“filename=[name].xls”,其中[name]可以根据报表的标题而变化。在internet explorer(11在windows 10上运行)中,浏览器显示“what do you want to do with[filename]”弹出窗口。弹出窗口上的[filename]正确地显示了由content disposition头指定的文件名。如果选择了“保存”,则为文件选择的名称也将与该头匹配。但是,当选择“打开”时,excel会显示reportsclientinterface(位于如上所示的url中)作为名称,而不是预期的报告名称。更糟糕的是,如果我们让excel保持打开状态并生成第二个报表,excel将拒绝打开它,因为第二个报表也尝试以“reportsclientinterface”的名称打开。
有没有办法强迫ie/excel遵守头文件中指定的文件名,这样就不会出现这个问题?
提前谢谢。

vwkv1x7d

vwkv1x7d1#

有没有办法强迫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很重要。请多注意它们,不要接受任何会导致如此混乱的路由系统(routing=连接url的进程,例如 /ias/ReportsClientInterface ,到某个处理程序-您编写的java代码,用于响应此操作。这就是所谓的“路由”)。
我假设您使用的是一个自动路由系统,也就是说,您可能有一个名为 ReportsClientInterface 现有的路由系统使用它来自动加载类。或者你有一个系统,它会产生,比如,把这个url链接到你的类的xml。
不管是哪种方式,看看您拥有的web框架,找出如何控制路由,然后花点时间清点您公开的每个服务和页面,并为所有这些考虑一个好的url方案。然后实施这个。
每个webframework的路由都不同,所以如果不知道使用哪一个,我就不能更详细地介绍如何做这项工作。

相关问题