我正在尝试从ArrayBuffers的块中创建一个图像文件。
all= fs.createWriteStream("out."+imgtype);
for(i=0; i<end; i++){
all.write(picarray[i]);
}
all.end();
其中picarray
包含ArrayBuffer块。但是,我收到错误
TypeError: Invalid non-string/buffer chunk
。
如何将ArrayBuffer块转换为图像?
答案 0 :(得分:3)
您是否曾尝试将其转换为node.js.
Buffer
? (这是本机node.js Buffer
接口,而ArrayBuffer
是浏览器的接口,而node.js写操作并不完全支持。
这方面的内容应该有所帮助:
all= fs.createWriteStream("out."+imgtype);
for(i=0; i<end; i++){
var buffer = new Buffer( new Uint8Array(picarray[i]) );
all.write(buffer);
}
all.end();
答案 1 :(得分:1)
花了一些时间我得到了它,它对我来说非常有用。
如@Nick所提到的,您必须将从浏览器中收到的缓冲区数组转换为nodejs Buffer。var readWriteFile = function (req) {
var fs = require('fs');
var data = new Buffer(req);
fs.writeFile('fileName.png', data, 'binary', function (err) {
if (err) {
console.log("There was an error writing the image")
}
else {
console.log("The sheel file was written")
}
});
});
};
答案 2 :(得分:0)
Array Buffer 是浏览器支持的,不支持写入文件,我们需要转换为 NodeJs 运行时引擎的 Buffer 原生 api。
这几行代码将创建图像。
const fs = require('fs');
let data = arrayBuffer // you image stored on arrayBuffer variable;
data = Buffer.from(data);
fs.writeFile(`Assets/test.png`, data, err => { // Assets is a folder present in your root directory
if (err) {
console.log(err);
} else {
console.log('File created successfully!');
}
});