我正在尝试从浏览器导出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' });
});
}
有人知道可能是什么问题吗?
答案 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()
。