Node.js将同一个可读流导入多个(可写)目标

8 浏览
0 Comments

Node.js将同一个可读流导入多个(可写)目标

我需要连续运行两个命令,这两个命令需要从同一个流中读取数据。

在将一个流管道传递给另一个流后,缓冲区会被清空,所以我无法再从该流中读取数据,因此这种方法行不通:

var spawn = require('child_process').spawn;

var fs = require('fs');

var request = require('request');

var inputStream = request('http://placehold.it/640x360');

var identify = spawn('identify',['-']);

inputStream.pipe(identify.stdin);

var chunks = [];

identify.stdout.on('data',function(chunk) {

chunks.push(chunk);

});

identify.stdout.on('end',function() {

var size = getSize(Buffer.concat(chunks)); //width

var convert = spawn('convert',['-','-scale',size * 0.5,'png:-']);

inputStream.pipe(convert.stdin);

convert.stdout.pipe(fs.createWriteStream('half.png'));

});

function getSize(buffer){

return parseInt(buffer.toString().split(' ')[2].split('x')[0]);

}

请求(Request)对此进行了投诉

错误:在响应数据发出后,您无法进行管道传输。

将inputStream更改为fs.createWriteStream当然会遇到相同的问题。

我不想写入文件,而是以某种方式重用由request生成的流(或者其他流)。

一旦完成管道传输,有没有办法重新使用可读流?

如何最好地实现类似上面示例的操作?

0