我遇到了一个问题,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 - 它不起作用。似乎甚至没有调用过滤器,没有抛出错误等等。任何想法为什么会发生这种情况?
答案 0 :(得分:5)
您希望适当地设置内容类型以及内容处置标题,因此:
response.setContentType( “应用程序/ vnd.ms-EXCEL”);
response.setHeader(“内容处置”, “attachment; filename = \”“+ filename + “\”“);
答案 1 :(得分:1)
使用Content-Disposition
HTTP标头并将其设置为:
attachment; filename=myworkbook.xls
关于这个问题的全部是Microsoft Knowledge Base Article。这是一个example of setting Content-Disposition in Java code。
答案 2 :(得分:0)
除了设置内容类型的标题之外,您还需要确保服务器不要告诉浏览器不要缓存该文件。
在IE版本中,如果你告诉IE不要缓存文件,它会愉快地下载文件...然后尝试从保存文件的目录中打开文件...但是由于标题说“不” t缓存“它需要字面意思,并没有保存文件,因此Excel抛出一个错误说,”没有文件!“。
长话短说, 告诉IE CACHE文件 。