使用 Internet Explorer 打开 Excel 文档时出现问题

Posted

技术标签:

【中文标题】使用 Internet Explorer 打开 Excel 文档时出现问题【英文标题】:Issue opening Excel documents with Internet Explorer 【发布时间】:2010-10-11 12:27:31 【问题描述】:

我遇到了一个问题,即 IE 无法像 Firefox 那样打开 Excel 文档的“另存为/打开”对话框。

所以我创建了一个使用 '*.xls' 作为 url 模式的 servlet 过滤器。我现在面临的问题(因为这是我创建的第一个过滤器)是如何获取用户想要的文件名,以便正确填充对话框。当前,当用户选择给定页面上的链接时,将调用过滤器。

这是我想出的:

以上是我所拥有的doFilter()。

String fileName = "fileName.xls";

HttpServletRequest httpRequest = (HttpServletRequest) pRequest;
String requestURI = httpRequest.getRequestURI();

if(StringUtils.isNotBlank(requestURI))

  String uri[] = StringUtils.split(requestURI, '/');
  fileName = uri[uri.length - 1];


HttpServletResponse httpResponse = (HttpServletResponse) pResponse;
httpResponse.setContentType("application/vnd.ms-excel");
httpResponse.setHeader("Content-disposition", "attachment; filename=\"" + fileName +"\"");

web.xml:

<filter>
    <filter-name>ExcelFilter</filter-name>
    <filter-class>vsg.rp.common.ExcelFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExcelFilter</filter-name>
    <url-pattern>*.xls</url-pattern>
</filter-mapping>

这一切都在我的开发机器上运行:Windows XP、JBoss、Eclipse、Oracle。但是当它在测试服务器(Linux、Apache/JBoss、Oracle)上运行时,它就不起作用了。似乎甚至没有调用过滤器,也没有抛出错误等。知道为什么会发生这种情况吗?

【问题讨论】:

【参考方案1】:

您希望正确设置内容类型以及内容处置标头,因此:

response.setContentType("application/vnd.ms-excel"); response.setHeader("内容配置", "附件;文件名=\"" + 文件名 + "\"");

【讨论】:

您指定了一个文件名变量 - 这是如何设置的? 这只是您希望在浏览器中显示给您的文件的名称。例如设置 filename="sample.xls" 将提示 IE/Firefox 等下载 Excel 并将其保存(如果需要)为“sample.xls”【参考方案2】:

使用Content-Disposition HTTP 标头并将其设置为:

attachment; filename=myworkbook.xls

Microsoft Knowledge Base Article 是关于这个问题的。这是example of setting Content-Disposition in Java code。

【讨论】:

【参考方案3】:

除了设置内容类型的标头之外,您还需要确保服务器不会告诉浏览器不要缓存文件。

在 IE 领域,如果您告诉 IE 不要缓存文件,它会愉快地下载文件...然后尝试从将文件保存到的目录中打开文件...但是由于标题说“不要” t cache" 它从字面上理解,并且不保存文件,因此 Excel 会抛出一个错误,说“没有文件!”。

长话短说,告诉 IE 缓存文件

【讨论】:

以上是关于使用 Internet Explorer 打开 Excel 文档时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

selenium中的webdriver在FireFox中打开一个新的Internet Explorer选项卡

在 Internet Explorer 7 中打开多个页面的 Windows 控制台命令

如何使用 JavaScript 显示“此网站需要 Internet Explorer”?

在新窗口/标签中打开 Google Docs iframe 链接在 Internet Explorer 中不起作用

如何从批处理文件中打开和关闭 Internet Explorer?

`base` 标记使 iframe 在 Internet Explorer 中作为新窗口打开