在Nodejs中从ArrayBuffer创建图像

时间:2016-03-25 20:00:17

标签: javascript node.js file arraybuffer

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

3 个答案:

答案 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!');
      }
});