在IE和Firefox中使用Excel打开CSV文件的MIMEtypes/内容types

我一直有一个问题,让CSV输出被识别和打开在Excel中。 在我的web应用程序中,我有一个java servlet,它将search结果返回给用户。 search结果由Apache Solr服务器提供。 GUI前端有一个选项,允许用户以“CSV”格式请求search结果。 如果select该选项,则通过添加“wt = csv”参数来针对Solr重新运行查询。 然后,一个javafilter添加标题,以CSV格式文本的forms返回结果。 但是它不能正常工作。

  • 在IE(版本8.0),我被提示“打开”或“保存”文件。 如果我select“打开”; 它只是在屏幕上转储CSV格式的文本,而不是在Excel中打开它。 如果我select“保存” 我收到一条错误消息 – “无法打开这个网站。 请求的网站要么不可用,要么找不到。“
  • 在Firefox(版本10.0.9)也; 我得到提示打开或保存文件。 但是打开CSV文件; 记事本和Excel的默认选项甚至没有列出。 如果我点击“保存”,那么它下载的CSV文件,我可以在Excel中打开它,并正确识别Excel。

我已经尝试了各种标题和组合 –

//((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.C​​SV

内容types:文本/无格式;字符集= UTF-8

服务器:docker(7.xy-快照)

传输编码:分块

有所不同:接受编码

即使内容types被指定为csv或Excel, 当它到达浏览器时,它被解释为文本/平原&我认为这是问题。 不知道什么标题或编码我应该设置? 有什么build议么? 谢谢。

我正在做类似的事情,这是我使用的代码的一部分:

  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); 

请注意,我使用variables“contentType”告诉servlet将生成什么样的文件。

希望对你有效。