我有一个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中的响应标头,它看起来像这样(编辑后现在显示完整的“未解析”标题):
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
..并且“响应”选项卡显示我正在写回复的内容。
我接近我的智慧结束,因为我所看到的所有例子都成功地做到了这一点。
答案 0 :(得分:1)
您的示例中有内容类型和编码交换。它应该是
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
个文件。
答案 1 :(得分:0)
在jQuery mobile中,表单默认由Ajax处理,使用data-ajax =“false”解决了问题,例如
<form id="myform" action="../filedownload" method="POST" data-ajax="false">
有点头脑发热的时刻,那里: - )