我遇到了让CSV输出被识别的问题。在Excel中打开。在我的Web应用程序中,我有一个java servlet,它将搜索结果返回给用户。搜索结果由Apache Solr服务器提供。 GUI前端有一个选项,允许用户以“CSV”格式请求搜索结果。如果选择此选项,则通过添加“wt = csv”参数对Solr重新运行查询。然后,java过滤器添加标头以将结果作为CSV格式文本返回。但它无法正常工作。
我尝试过各种各样的标题&组合 -
//((HttpServletResponse)response).setHeader("Content-Type", "application/octet; charset=utf-8");
((HttpServletResponse)response).setHeader("Content-Type", "text/csv");
//((HttpServletResponse)response).setHeader("Content-Type", "application/vnd.ms-excel");
//((HttpServletResponse)response).setHeader("Cache-Control", "private, private,max-age=0,must-revalidate");
//((HttpServletResponse)response).setHeader("Content-Encoding", "gzip");
//((HttpServletResponse)response).setHeader("Content-Encoding", "binary");
((HttpServletResponse)response).setHeader("Content-Disposition", "attachment; filename=Download.CSV");
//((HttpServletResponse)response).setHeader("Content-Disposition", "inline; filename=Download.CSV;");
但他们似乎都没有工作。我使用Firefox来检查正在发回的标头。我看到以下内容 -
内容处置:附件;文件名= Download.CSV
内容类型:文本/无格式;字符集= UTF-8
服务器:码头(7.x.y-SNAPSHOT)
传送编码:分块
有所不同:接受编码
即使content-type指定为csv或excel;当它到达浏览器时,它被解释为text / plain&我认为这是问题所在。不确定我应该设置什么标头或编码?有什么建议?感谢。
答案 0 :(得分:1)
我正在做类似的事情,这是我正在使用的代码的一部分:
Date dt = new Date();
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd_HHmmss");
String filename = fmt.format(dt) + ".csv";
//Setup the output
String contentType = "application/vnd.ms-excel";
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse)fc.getExternalContext().getResponse();
response.setHeader("Content-disposition","attachment; filename=" + filename);
response.setContentType(contentType);
请注意,我使用变量“contentType”来告诉servlet将生成哪种文件。
希望它适合你。