发送可写流作为附件节点表达

时间:2016-05-31 09:31:46

标签: node.js express exceljs

我正在使用模块exceljs创建一个xlsx工作簿,然后我希望通过我的快速中间件将其作为附件发送。

我使用以下代码在流中创建并保存我的工作簿,如模块文档中所示

    var stream = fs.createWriteStream('test.xlsx');    
    // write to a stream
    workbook.xlsx.write(stream)
        .then(function() {
            // done
    }); 

其中stream是可写流。

我的问题是我无法理解如何处理流以便发送它。 试图将它传递给res stream.pipe(res)会给我一个错误,这个错误不是可读的流管道。

现在对我来说最好的行动方案是什么?

P.S。我可以将它保存到服务器的文件中,然后读取文件并通过express发送。这对我没有帮助,因为之后不需要附件,这是我不喜欢的解决方法。

2 个答案:

答案 0 :(得分:1)

如果您有流,则可以执行以下操作,将其作为附件发送至快递:

res.attachment('yourfile.xlsx'); stream.pipe(res);

答案 1 :(得分:0)

您可以使用Exceljs'默认流式传输XLSX Writer。

// construct a streaming XLSX workbook writer with styles and shared strings
var options = {
    stream: res // stream to server response
};
var workbook = new Excel.stream.xlsx.WorkbookWriter(options);

根据the document,构造函数使用带有以下字段的可选选项对象:

  • stream:指定要写入XLSX工作簿的可写流。
  • filename:如果未指定stream,则此字段指定a的路径 用于将XLSX工作簿写入的文件。