【问题标题】:Contents of csv file getting displayed on webpage instead of a proper file downloadcsv 文件的内容显示在网页上,而不是正确的文件下载
【发布时间】:2016-10-01 20:23:36
【问题描述】:

问题:如果记录数很大,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 表单打开一个新窗口)

【问题讨论】:

    标签: java file csv download


    【解决方案1】:

    这是因为 Writer 实例用于生成响应。

    我们需要将其视为字节。

    ServletOutputStream out = response.getOutputStream(); 
    out.write(baos.toByteArray());
    baos.writeTo(out);
    out.flush();
    

    【讨论】:

      【解决方案2】:

      您需要添加标头以告诉浏览器它在响应中的附件。请检查以下内容!

      String filename = "volcs.csv";
      response.setContentType("application/force-download");
      response.setContentLength((int)f.length());
      //response.setContentLength(-1);
      //response.setHeader("Content-Transfer-Encoding", "binary");
      response.setHeader("Content-Disposition","attachment; filename=" + filename);
      

      【讨论】:

        猜你喜欢
        • 2013-12-26
        • 1970-01-01
        • 1970-01-01
        • 2016-03-17
        • 2017-07-11
        • 2014-07-16
        • 2011-07-11
        • 1970-01-01
        • 2012-01-18
        相关资源
        最近更新 更多