目标是:

  • 创建文件读取流。
  • 用管道将其传输到gzip(zlib.createGzip())
  • 然后将zlib输出的读取流通过管道传输到:

    1)HTTP response对象

    2)可写文件流,以保存压缩后的输出。

  • 现在我可以降到3.1了:
    var gzip = zlib.createGzip(),
        sourceFileStream = fs.createReadStream(sourceFilePath),
        targetFileStream = fs.createWriteStream(targetFilePath);
    
    response.setHeader('Content-Encoding', 'gzip');
    
    sourceFileStream.pipe(gzip).pipe(response);
    

    ...效果很好,但我还需要将压缩后的数据保存到文件中,这样我就不需要每次都进行zip压缩并能够直接流式传输压缩后的数据作为响应。

    那么,如何在Node中一次将一个可读流传输到两个可写流中?
    sourceFileStream.pipe(gzip).pipe(response).pipe(targetFileStream);在Node 0.8.x中可以工作吗?

    最佳答案

    管道链接/拆分不起作用,就像您在此处尝试将其发送到两个不同的后续步骤一样:
    sourceFileStream.pipe(gzip).pipe(response);
    但是,您可以将相同的可读流传递给两个可写流,例如:

    var fs = require('fs');
    
    var source = fs.createReadStream('source.txt');
    var dest1 = fs.createWriteStream('dest1.txt');
    var dest2 = fs.createWriteStream('dest2.txt');
    
    source.pipe(dest1);
    source.pipe(dest2);
    

    关于node.js - 如何在Node.js中一次将一个可读流传输到两个可写流中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14173488/

    10-09 16:19