我有一个 Servlet,其操作可根据表单中 POST 中传递的参数生成 CSV 文件。 Servlet 代码片段如下所示:
response.setContentType("text/csv");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition","attachment; filename=" + filename);
PrintWriter pw = response.getWriter();
pw.println(content); // content is some CSV in a string
pw.close();
浏览器(FF 和 Chrome)似乎忽略了附件指示器,因为它将 URL 更改为相应的操作(例如 http://myserver.com/filedownload )并且不显示“另存为”对话框。我检查了 Chrome 中的响应 header ,它看起来像这样(编辑后现在显示完整的“未解析” header ):
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment; filename=JobTracking.csv
Content-Type: text/csv;charset=UTF-8
Content-Length: 16876
Date: Tue, 15 Jul 2014 22:32:49 GMT
..“响应”选项卡显示我正在写入响应的内容。
我已经无计可施了,因为我看过的几乎所有例子都成功地做到了这一点。
最佳答案
您在示例中交换了内容类型和编码。应该是
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
不确定如何在响应中返回 Content-Type:application/vnd.ms-excel;charset=UTF-8
。
编辑:
此外,CSV 文件的正确 MIME 类型是 text/csv
,而不是 application/vnd.ms-excel
- 此类型适用于 *.xls
文件。
关于java - servlet 生成的文件无法下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748153/