在 Nodejs 中从 ArrayBuffer 创建图像

Create image from ArrayBuffer in Nodejs

我正在尝试从 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 块转换为图像?

您是否尝试过先将其转换为 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();

花了一些时间后我得到了这个,它非常适合我。

如@Nick 所述,您必须将从浏览器收到的缓冲区数组转换为 nodejs 缓冲区。

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")
            }
        });
    });
};

Array Buffer 是浏​​览器支持的,将不支持写入文件,我们需要转换为 NodeJs 运行时引擎的 Buffer native 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!');
      }
});