node express buffer excel传输到前端下载

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

相关文章
相关标签/搜索