生成/下载CSV文件而不在服务器上存储

时间:2016-07-04 11:24:47

标签: java csv apache-commons-csv

我正在使用Java中的apache.commons.csv库来生成CSV并使其可以下载而无需使用以下代码存储在服务器上:

try (OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream())){
        csvWriter = new CSVPrinter(osw,CSVFormat.DEFAULT);

        writer.printRecord(row);
        response.setContentType("text/csv");
        response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + "\";");
catch(Exception e) {
        //Exception block
}
finally {
        try {
            csvWriter.flush();
        } catch (IOException e) {
            logger.error("Exception while flushing file writer and CSV writer",e);
        }

    }

但它在浏览器上显示csv,而不是要求我保存为下载选项。

代码有什么问题,还是有其他方法可以做同样的事情?

1 个答案:

答案 0 :(得分:0)

您可以参考下面的代码。这会要求您保存'保存'弹出窗口。

将请求属性中的数据设置为像request.setAttribute("list", list)这样的ArrayList 并将其发送到JSP文件。

将此代码写入JSP文件。

<%
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-disposition","attachment; filename=Report_File_Name.xls");
    response.setHeader("CookiesConfigureNoCache", "false");             
    response.setHeader("Pragma","private,no-cache");     
    response.setHeader("Cache-control","private,no-store,no-cache,max-age=0,must-revalidate");

    ArrayList<String> List = (ArrayList<String>) request.getAttribute("list");
        for(int i = 0; i < List.size(); i++){
    %>
            <%=List.get(i).toString()%><br>
    <%
        }

    %>