【问题标题】:Send writable stream as an attachment node express发送可写流作为附件节点 express
【发布时间】:2018-03-12 16:36:18
【问题描述】:

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

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

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

其中流是可写流。

我的问题是我无法理解如何处理流以发送它。 尝试将其通过管道传输到 res stream.pipe(res) 会给我一个错误,即无法读取流来传输它。

现在对我来说最好的做法是什么?

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

【问题讨论】:

    标签: node.js express exceljs


    【解决方案1】:

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

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

    【讨论】:

    • 正如我在上面写的那样 stream.pipe(res) 给出了一个错误。 “未处理的拒绝错误:无法管道。不可读”
    • 是否有更多的代码让我们可以看到上下文?比如你如何创建流。
    • 我添加了流的创建。如果您认为我没有正确开始,我愿意接受建议。
    • 您需要执行createReadStream 才能将流获取到文件。
    【解决方案2】:

    您可以使用 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:如果未指定流,则此字段指定一个路径 将 XLSX 工作簿写入的文件。

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多