2014-07-15 49 views
1

我有一个servlet,其中的一个动作可以根据从表单中传递过来的参数生成一个CSV文件。 servlet代码段看起来像这样:由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和铬)似乎被忽略附件指示器,因为它改变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

请张贴浏览器接收完整的响应。也许有一个重定向发生? –

+0

通过“完全响应”,您是指Chrome开发人员工具窗口中“响应”选项卡上的内容?这只是将CSV写入响应。我编辑了问题以显示“未解析的”响应标题。 –

+0

什么是请求URI,以及“相应操作”是什么意思? –

回答

0

在jQuery手机中,默认情况下,表单由Ajax处理,使用data-ajax =“false”解决了问题。

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

位头打耳光的时刻,有:-)

1

在您的示例中,您的内容类型和编码已交换。它应该是

response.setContentType("application/vnd.ms-excel"); 
response.setCharacterEncoding("UTF-8"); 

不知道你如何回复Content-Type:application/vnd.ms-excel;charset=UTF-8虽然。

编辑:

而且,正确的MIME类型CSV文件是text/csv而不是application/vnd.ms-excel - 这一个是*.xls文件。

+0

我为了可读性取代常数与实际值。不幸的是,我把它们交换了一遍。现在编辑的问题是正确的。更改为text/csv没有区别,application/x-unknown也没有,或者其他任何内容。 –

+0

@DaveNottage请发布完整的回复以及所有标题,如Julian Reschke建议的 – dimoniy