我有json数据,我想将其导出为data.xlsx。例如
我的表中有一个导出按钮,如果用户单击该导出按钮,则此ng-click功能将起作用。
controllers.js:
$scope.exportDataXlsx = function () {
var json = $scope.contacts;
console.log(json);
$http.post('/api/exportcontactsxlsx', json).then(function (response) {
$state.reload();
toastr.success("exported successfully!");
});
};
我的api代码:
exports.exportContactsXlsx = function (req, res) {
var data = req.body;
var xls = json2xls(data);
fs.writeFileSync('data.xlsx', xls, 'binary');
}
我正在使用名为jsonexport的npm包。
如果我点击导出,该文件将下载到我的项目。
但我需要输出,当用户点击导出按钮时,'data.xlsx'文件应该在chrome左下角和用户默认下载目录中下载。
答案 0 :(得分:1)
您必须在res标头中设置参数。
您可以尝试以下方法:
var fields = ['firstName', 'email'];
var csv = json2csv({ data: resp, fields: fields });
res.set('Cache-Control', 'max-age=0, no-cache, must-revalidate, proxy-revalidate');
res.set('Content-Type','application/force-download');
res.set('Content-Type','application/octet-stream');
res.set('Content-Type','application/download');
res.set('Content-Disposition','attachment;filename=userList.csv');
res.set('Content-Transfer-Encoding','binary');
res.send(csv);
所以当你在浏览器中点击API时,它会询问SaveFile选项,如果用户点击OK,它将被下载到chrome的默认下载目录。
答案 1 :(得分:1)
。您需要的是发送文件的名称,以便您可以从浏览器访问它:
$scope.exportDataXlsx = function () {
var json = $scope.contacts;
console.log(json);
$http.post('/api/exportcontactsxlsx', json).then(function (response) {
downloadFile(response.fileName) // make sure response.fileName has the file name
$state.reload();
toastr.success("exported successfully!");
});
};
function downloadFile(name) {
var link = document.createElement('a');
link.download = name;
link.href = '/files/' + name;
link.click();
}
服务器:
// in app.js, to serve your files as static files
app.use("/files", express.static(path.join(__dirname, 'files')));
// send the the name of your file to the client
exports.exportContactsXlsx = function (req, res) {
var data = req.body;
var xls = json2xls(data);
fs.writeFileSync(path.join(__dirname,'../files/data.xlsx'), xls, 'binary');
//changed the directory
res.json({ fileName: 'data.xlsx' });
}