csv文件的内容显示在网页上而不是正确的文件下载

时间:2016-06-02 08:06:42

标签: java file csv download

问题:如果记录数量很大,则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表单的新窗口)

2 个答案:

答案 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); ...