2012-11-12 21 views
5

Ich versuche, nodeJS zu verwenden, um ein verarbeitetes Bild zu speichern, das in einer Base64-Zeichenfolge gespeichert ist.NodeJS writeStream leere Datei

var buff = new Buffer(base64data,'base64'); 
console.log(base64data); 

var stream = fs.createWriteStream('/path/to/thefile.png'); 
stream.write(buff) 
stream.end() 

Die resultierende Datei ist jedoch leer.

Wenn ich die Ausgabe von console.log(base64data); nehme und es lokal dekodiere, erzeugt es eine gültige png-Binärdatei, also warum ist die Datei leer?

Die Datei ist eine 3600x4800 px PNG-Datei (d. H. Es ist riesig), könnte dies ein Faktor sein?

Auch versuchte ich writeFile als auch, kein Glück.

Und ja, fs ist require('fs')

Dank

+0

der Code gültig ist, und ich kann es vor Ort, versuchen Sie bekommen arbeiten Anmeldung 'buff' wie das ist, was Sie versuchen, (nicht' base64data') auf die schreiben Datei, um festzustellen, ob ein Problem bei der Konvertierung vorliegt. Vielleicht möchten Sie auch versuchen, Ihre Berechtigungen zu überprüfen. – Sdedelbrock

Antwort

8

Ihre stream.end() zu früh als nichts geschrieben. Es ist asynchrone Funktion erinnern.

var buff = new Buffer(base64data,'base64'); 
console.log(base64data); 

var stream = fs.createWriteStream('/path/to/thefile.png'); 
stream.write(buff); 
stream.on("end", function() { 
    stream.end(); 
}); 
1

Besser:

var buff = new Buffer(base64data,'base64'); 
console.log(base64data); 

var stream = fs.createWriteStream('/path/to/thefile.png'); 
stream.write(buff); 
stream.end(); 
stream.on('finish',() => { 
    //'All writes are now complete.' 
}); 
stream.on('error', (error) => {...}); 
+1

Können Sie einige Details zu den von Ihnen hinzugefügten Zeilen angeben? – jhhoff02

+0

Bitte lesen Sie die Dokumentation von Node.js. –