使用 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 中不起作用