由于要使用js-xlsx获取json转为xlsx,传输给前端下载。翻了不少的文档,js-xlsx的文档真的难读啊。
方式1
- buffer 直接经过stream 传输给前端。好处就是不用先存再download了
const XLSX = require('xlsx');
var stream = require('stream');
const book = XLSX.utils.book_new();
const sheet = XLSX.utils.aoa_to_sheet([
["你好", "我很差", "嘻嘻嘻"],
[1, 2, 3],
[3, 4, 5],
[8, 7, 6],
[213, 123, 123],
]);
XLSX.utils.book_append_sheet(book, sheet, "test");
const fileContents = XLSX.write(book, { type: 'buffer', bookType: 'xlsx', bookSST: false });
var readStream = new stream.PassThrough();
readStream.end(fileContents);
let fileName = "text.xlsx";
res.set('Content-disposition', 'attachment; filename=' + fileName);
res.set('Content-Type', 'text/plain');
readStream.pipe(res);
复制代码
方式2
// fileContents 是上面的fileContents,同样的buffer。
let fileName = moment().format('YYYYMMDDHHmmss') + '.xlsx';
let filePath = 'doc/' + fileName;
fs.writeFileSync(filePath, fileContents, { encoding: 'binary' });
return res.download(filePath, fileName);
//也能够这么写。
//fs.writeFile(savedFilePath, fileContents, function() {
//response.status(200).download(savedFilePath, fileName);
//});
复制代码
最后,前端访问下载推荐使用get,直接用a标签点击下载。若是用post就要建立一个a标签,点击一下,具体的百度谷歌吧。
参考1 stackoverflow 比较好的中文参考博客html