servlet生成的文件未下载



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

. ."响应"选项卡显示了我写到响应的内容。

我几乎要绞尽脑汁了,因为几乎所有我看过的例子都成功地做到了这一点。

您在示例中交换了内容类型和编码。应该是

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文件。

在移动版jQuery中,表单默认由Ajax处理,使用data-ajax="false"解决了这个问题,例如

<form id="myform" action="../filedownload" method="POST" data-ajax="false">

有点拍头的时刻:-)

相关内容

  • 没有找到相关文章

最新更新