2016-12-04 6 views
0

Ich habe einen Server und einen Client mit Nodejs eingerichtet. Der Server sendet eine Datei mit socket.io-stream an den Client. Wenn die Datei übertragen wird, möchte ich auf der Clientseite damit arbeiten. Dafür höre ich das "Ende" -Ereignis des Streams. Mein Code funktioniert aber nur einmal. Bei der ersten Datei, die ich sende, wird das Ereignis ausgelöst, aber nicht bei den nächsten. Nach der ersten Datei sind die nächsten beschädigt und sind 0 Bytes.Stream.pipe Ereignis 'Ende' löst nur einmal auf Nodejs socket.io-stream

server.js

socketObj.emit('order', orderData); 

ss(socketObj).on('file', function(stream) { 
      fs.createReadStream('./uploads/'+ orderData.file.name +'').pipe(stream); 
}); 

Client.js

socket.on('order', function(data) { 

    var stream = ss.createStream(); 

    ss(socket).emit('file', stream); 

    stream.pipe(fs.createWriteStream(data.file.name)); 

    stream.on('end', function(){ 
     doSomeStuff(data); //This function is called only once 
    }); 

}); 

Ich habe versucht, 'Ende' und 'Fertig stellen' Ereignisse mit, das Setzen von Autoclose als wahr und falsch, mit stream.close () und stream.end(), aber nichts funktioniert. Für mich ist wie etwas nicht richtig zurückgesetzt wird.

Antwort

0

Versuchen Sie dies in Ihrer Client.js Datei:

socket.on('order', function(data) { 

    var stream = ss.createStream(); 
    var writeStream = fs.createWriteStream(data.file.name); 

    ss(socket).emit('file', stream); 

    stream.pipe(writeStream); 

    writeStream.on('close', function(){ 
     doSomeStuff(data); 
    }); 

}); 
+0

Danke für die Antwort, aber ich das gleiche Verhalten zu bekommen. – Domingo

Verwandte Themen