我正在尝试在服务器端生成一个csv文件,然后将其发送到客户端并下载该文件。
在我的服务器端,我有以下代码: function exportUsersToCSV(request,reply){
let payload = request.payload;
let users = payload.users; //array of json objects users
var fields = ["firstName", "level"];
var csv = json2csv({ data: users, fields: fields });
fs.writeFile('./../../temp/file.csv', csv, function (err) {
if (err) {
console.error(err);
return reply({ ok: false, message: err.message });
}
fs.open('file.csv', 'r', function (err, file) {
if (err) {
console.error("ERROR: " + err.message);
return reply({ ok: false, message: err.message });
}
return reply({ ok: true, result: file, type: 'text/csv' });
});
});
}
我现在不知道为什么但是如果我记录了我得到一个数字,但是如果我这样做,我会看到该文件很有竞争力:
var buffer = new Buffer(100);
fs.read(file, buffer, 0, 100, 0, function (err, num) {
console.log(buffer.toString('utf8', 0, num));
});
在API我有以下内容:
return Request(options).then((response) => {
if (response.ok) {
//TODO: If file...
if (response.type == "text/csv") {
console.log("API RESULT: " + response.result);
reply(response.result)
.header('Content-Type', 'text/csv')
.header('Content-Disposition', 'attachment; filename=file.csv');
} else {
return reply(response.result)
}
} else {
return reply(Boom.badRequest(response.message));
}
})
在我的客户端,我有:
exportUsersToCSV(users) {
let body = JSON.stringify(
{
users: users
});
let options = Shared.getOptions();
return this.http.post(Globals.ApiUrl + "/admin/users/exportUsersToCSV", body, options)
.map((res) => {
return res.text();
});
}
然后:
exportUsersToCSV(users) {
this.usersService.exportUsersToCSV(users).subscribe((csvFile) => {
let fileType = Object.prototype.toString.call(csvFile);
console.log("fileType: " + fileType);
},
error => { console.error("ERROR: " + error.message) }
);
}
如果我记录了fileType,我会得到[Object String]。我可以将此文件作为CSV下载到我的浏览器吗?如果是,怎么样?