Ich muss zwei Befehle in Reihe ausführen, die Daten aus demselben Stream lesen müssen. Nach dem Weiterleiten eines Streams in einen anderen wird der Puffer geleert, sodass ich keine Daten mehr aus diesem Stream lesen kann, sodass dies nicht funktioniert:
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]);
}
Anfrage beschwert sich darüber
Error: You cannot pipe after data has been emitted from the response.
und Ändern des inputStream , fs.createWriteStream
um natürlich das gleiche Problem zu erhalten. Ich möchte nicht in eine Datei schreiben, sondern den von dieser Anforderung erzeugten Stream (oder einen anderen) in irgendeiner Weise wiederverwenden .
Gibt es eine Möglichkeit, einen lesbaren Stream nach Abschluss der Rohrleitungen wiederzuverwenden? Was wäre der beste Weg, um so etwas wie das obige Beispiel zu erreichen?