Wie schreibt Binärdaten in eine Datei mit node.js?
Ich versuche zu tun toDataUrl()
Leinwand, und es gibt base64
Daten. Ich möchte, um es zu speichern als png
. Ich kann die konvertiert binäre Daten in base64 kodiert ist, aber ich kann nicht schreiben Sie es auf einer Datei mit NodeJs service.
Wenn ich Schreibe base64-Daten direkt in die Datei werden alle Daten geschrieben werden können, aber es kann nicht sein png
Recht?. Ich möchte zum speichern der binären Daten gespeichert werden. Wie es zu tun?
Code-snippet:
var strData = this.drawingCanvas.getContext().canvas.toDataURL();
var data = strData.replace(/^data:image\/\w+;base64,/, "");
var imgData = this.decode(data); //decode(data) is DEFINED BELOW
this.call({filePath:'<path>/image.png', data: imgData},
{method:"writeFile"});`
`utf8decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length ) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
},`
`_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
decode : function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = this.utf8decode(output);
return output;
},`
/**************************************************
wRITEfILEaaSSISTANT.JS
***************************************************/
var WriteFileAssistant = function(){};
WriteFileAssistant.prototype.run = function(future, subscription) {
var fs = IMPORTS.require('fs');
var filePath = this.controller.args.filePath;
var f = subscription.get();
f.result = {reply: data};
var fd = fs.openSync('<path>/image.png', 'a+');
//var data = fs.writeSync(fd, g, null, encoding='utf8');
//this.controller.args.data - Image data (binary)
var buff = new Buffer(this.controller.args.data, 'binary');
//tried also with 'base64'
fs.write(fd, buff, 0, buff.length, 0, function(err,written){
});
var f = subscription.get();
f.result = {reply: data};
Kannst du ein bisschen von dem rettenden code, den Sie haben, so weit, so dass wir noch etwas zu arbeiten?
Danke dir, ich habe den oben stehenden code.
Was du gepostet hast ist verständlich, aber bitte die code-Formatierung standards. Sie sollen Einzug alles mit 4 Räumen, nicht wickeln Sie Sie mit ` Marken.
Sorry.. ich habe versucht zu Gedankenstrich, aber nicht immer die richtige.
Danke dir, ich habe den oben stehenden code.
Was du gepostet hast ist verständlich, aber bitte die code-Formatierung standards. Sie sollen Einzug alles mit 4 Räumen, nicht wickeln Sie Sie mit ` Marken.
Sorry.. ich habe versucht zu Gedankenstrich, aber nicht immer die richtige.
InformationsquelleAutor Kantesh | 2011-09-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihr macht die Dinge viel schwieriger, als Sie sein müssen. Den Knoten-Puffer-Objekt base64 als Eingabe und gibt Sie alle, dass die Decodierung für Sie.
Können Sie nur Streifen die Daten:Bild... ein Teil aus dem base64-string und übergeben Sie die Daten an Ihre WriteFileAssistant.
Den die WriteFileAssistant nur muss der base64-Zeichenfolge und übergeben, die als argument an die Puffer-Konstruktor. Auch, mit "a+" auf der openSync rufen Sie brechen die Dinge zu.
Puffer nimmt eine Zeichenfolge und eine Codierung, dann verwendet er den encoding-Wert zu verarbeiten den string in eine Reihe von bytes, so dass, wenn Sie es sagen, dass die string base64, wird es decodiert die base64-für Sie und die richtigen decodiert array von bytes zum schreiben in die Datei.
Danke..ich habe es versucht , wurde aber geschrieben, wie es in base64. Ich weill überprüfen Sie noch einmal, was mir fehlte..
Eine weitere Sache, die ich vergaß zu erwähnen, ich Tue es in web-Os. Ich weiß nicht, ob es unterstützt werden Sollte.
Danke, Es hat funktioniert. Die Sache, die ich ändern musste war " a+". Noch einmal vielen Dank.
InformationsquelleAutor loganfsmyth