在浏览器中导出csv文件

时间:2019-05-13 19:07:21

标签: java export-to-csv

我正在尝试从浏览器导出csv文件。 接下来是流程。当我在GUI上单击按钮导出时,它应该在后端创建csv文件并在浏览器中显示给我(下载)。 但这是没有发生的。 当我单击按钮时,它从后端调用我的方法,它创建csv文件并将其存储到文件夹,但在浏览器中不会显示该文件。

这是我的代码:

public void export(HttpServletResponse response) throws IOException {       
    try {
        // create FileWriter object with file as parameter 
        FileWriter outputfile = new FileWriter("exported.csv"); 

        // create CSVWriter object filewriter object as parameter 
        CSVWriter writer = new CSVWriter(outputfile); 

        // create a List which contains String array 
        List<String[]> data = new ArrayList<String[]>(); 
        data.add(new String[] { "Name", "Class", "Marks" }); 
        data.add(new String[] { "Aman", "10", "620" }); 
        data.add(new String[] { "Suraj", "10", "630" }); 
        writer.writeAll(data); 

        // closing writer connection 
        writer.close(); 
        response.setContentType("application/ms-excel"); // or you can use text/csv
        response.setHeader("Content-Disposition", "attachment; filename=exported.csv"); 
    } 
    catch (IOException e) { 
       e.printStackTrace(); 
    } 
}

编辑:

角部分:

.service('ExportService', function($http) {
        this.export = function() {
            return $http.post('/data/export', { responseType: 'application/octet-stream' });
        };
    })

$scope.export = function() {
    ExportService.export()
        .success(function(data, status, headers, config) {
            var blob = new Blob([data], { type: 'application/octet-stream' });
            saveAs(blob, 'Exported  - exported.csv');
            $.growl({ message: '<br>successfully exported', title: '<b>SUCCESS</b>' }, { type: 'success' });
                })
        .error(function(data, status, headers, config) {
            $.growl({ message: '<br>Exporting failed', title: '<b>ERROR</b>' }, { type: 'danger' });
            });
    }

有人知道可能是什么问题吗?

2 个答案:

答案 0 :(得分:2)

您永远不会将文件发送给客户端。您甚至不必先将数据写入服务器上的文件。只需使用OutputStreamWriter

public void export(HttpServletResponse response) throws IOException {
    try (CSVWriter writer = new CSVWriter(new OutputStreamWriter(response.getOutputStream(), StandardCharsets.UTF_8)) {
        response.setContentType("text/csv");
        response.setHeader("Content-Disposition", "attachment; filename=exported.csv");

        List<String[]> data = new ArrayList<String[]>();

        data.add(new String[] { "Name", "Class", "Marks" });
        data.add(new String[] { "Aman", "10", "620" });
        data.add(new String[] { "Suraj", "10", "630" });

        writer.writeAll(data);
    }
}

顺便说一句:我将try块替换为try-with-resources块。这样,即使出现异常,也可以确保始终调用writer的close()方法。另外,这里不需要捕获异常,因为方法的调用者无论如何都必须处理IOException

答案 1 :(得分:0)

您正在将数据写入服务器本地的名为exported.csv的文件中。该文件不会发送到客户端。

您应该将文件的内容写入response.getOutputStream()