Tôi đang cố gắng làm toDataUrl()
của canvas và cung cấp dữ liệu base64
. Tôi muốn lưu trữ nó dưới dạng png
. Tôi có thể nhận được dữ liệu nhị phân được chuyển đổi từ base64, nhưng tôi không thể ghi nó vào một tệp bằng dịch vụ NodeJs.Làm thế nào để ghi dữ liệu nhị phân vào một tệp bằng cách sử dụng node.js?
Nếu tôi ghi dữ liệu base64 trực tiếp vào tệp, tất cả dữ liệu có thể được ghi, nhưng không thể là png
đúng ?. Tôi muốn lưu trữ dữ liệu nhị phân được lưu trữ. Làm thế nào để làm nó?
đoạn Code:
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 : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/=",
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};
Bạn có thể đăng một chút mã tiết kiệm mà bạn có cho đến giờ để chúng tôi có một số thứ để làm việc cùng không? – loganfsmyth
Cảm ơn bạn, tôi đã đăng mã ở trên. – Kantesh
Nội dung bạn đã đăng có thể đọc được, nhưng vui lòng xem lại các tiêu chuẩn định dạng mã. Bạn có nghĩa vụ phải thụt lề tất cả mọi thứ với 4 không gian, không quấn chúng với các dấu '. – loganfsmyth