Node.js将同一个可读流导入多个(可写)目标
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生成的流(或者其他流)。
一旦完成管道传输,有没有办法重新使用可读流?
如何最好地实现类似上面示例的操作?