问题:如果记录数量很大,则CSV文件的内容将显示为页面内容。
预计:文件下载。
请求通过window.open(url)从另一个页面触发;以下是url处理程序。
@RequestMapping(value = "/url", method = RequestMethod.GET)
public void handler(HttpServletRequest request,ModelMap map, @RequestParam("itemPk") long pk, HttpServletResponse response) throws Exception {
CSVWriter csvWriter = new CSVWriter(new OutputStreamWriter(response.getOutputStream()));
try {
List<String[]> data = new ArrayList<String[]>();
for (int i = 0; i < 500; i++) {
String[] row = new String[] {"asdr", "10", "sourajit", "34.567", "06-DEC-2015", "awx445"};
data.add(row);
}
csvWriter.writeAll(data);
response.setContentType("text/csv");
response.setHeader("Content-disposition", "attachment; filename=volcs.csv");
} finally {
csvWriter.flush();
csvWriter.close();
}
}
GET或POST的相同行为。 (对于POST,打开一个带有html表单的新窗口)
答案 0 :(得分:0)
这是因为Writer实例用于生成响应。
我们需要将其视为字节。
ServletOutputStream out = response.getOutputStream();
out.write(baos.toByteArray());
baos.writeTo(out);
out.flush();
答案 1 :(得分:0)
您需要添加标题以告知浏览器其在响应中的附件。检查下面的内容!
response.setContentType( “应用程序/力下载”); response.setContentLength((int)的f.length()); //response.setContentLength(-1); response.setHeader(“Content-Transfer-Encoding”,“binary”); response.setHeader(“Content-Disposition”,“attachment; filename = \”“+ “xxx \”“); // fileName); ...