java - 直接在 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 遵守标题中指定的文件名,这样就不会出现这个问题?
提前致谢。
解决方案
有没有办法强制 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 框架的路由都不同,所以在不知道你使用哪一个的情况下,我无法更详细地了解如何完成这项工作。
推荐阅读
- ios - 了解 Here Map iOS SDK 中的错误代码
- php - 在 PHP 中使用不同的访问令牌进行 API 调用
- json - 获取多个复选框值作为角度数组
- .net-core - 将 ServiceStack Redis 使用推送到 Application Insights 依赖项遥测
- mysql - 带有 sql 的 Nodejs
- python - 如何通过 django 视图调度 celery 任务
- json - (Django) 安装夹具“rules.json”时出现问题:“NoneType”对象没有属性“id”
- c# - 如何在c#后面的代码中动态地向html添加新元素
- c# - Hololens2 和 Unity:使用 QR 码放置与其相关的对象/标记
- android - 如何创建切换按钮效果?