java - servlet 生成的文件无法下载

标签 java html post attachment content-disposition

我有一个 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/

相关文章:

javascript - 如何将一串输入的文本分成单独的行?

html - 在 SharePoint 2007 中,如何更改 Web 部件区的背景颜色?

jQuery GET 不发送浏览器中的 IE

asp.net - 为 ViewModel 创建 View 帖子返回具有空外键属性的 ViewModel

java - 如何将 ArrayList 中的相同元素分组并获取每个唯一元素的数量?

java - 在 java 中以 MapReduce 模式启动 Pig 服务器

java - 错误: ByteBuddyAgent for ByteBuddy

java - Apache + Tomcat - 粘性 session 和负载平衡问题

php - 使用 session 显示/隐藏 div (php)

java - HTTP 向 Google App Engine 发送动态数据和从 Google App Engine 发送动态数据