由於要使用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