一尘不染

NodeJS:将base64编码的图像保存到磁盘

node.js

我的Express应用程序正在从浏览器中接收base64编码的PNG(使用toDataURL()从画布生成)并将其写入文件。但是该文件不是有效的图像文件,因此“文件”实用程序只是将其标识为“数据”。

var body = req.rawBody,
  base64Data = body.replace(/^data:image\/png;base64,/,""),
  binaryData = new Buffer(base64Data, 'base64').toString('binary');

require("fs").writeFile("out.png", binaryData, "binary", function(err) {
  console.log(err); // writes out file without error, but it's not a valid image
});

阅读 276

收藏
2020-07-07

共1个答案

一尘不染

我认为您正在转换的数据比您需要的更多。一旦使用正确的编码创建了缓冲区,您只需要将缓冲区写入文件即可。

var base64Data = req.rawBody.replace(/^data:image\/png;base64,/, "");

require("fs").writeFile("out.png", base64Data, 'base64', function(err) {
  console.log(err);
});

new
Buffer(…,’base64’)通过将输入解释为base64编码的字符串,将输入字符串转换为Buffer,它只是字节数组。然后,您可以将该字节数组写入文件。

更新资料

如评论中所述,req.rawBody已不再是一回事。如果使用express/
connect,则应使用bodyParser()中间件并使用req.body,并且如果使用标准Node进行此操作,则需要聚集传入的data事件Buffer对象,并在end回调中进行此图像数据解析。

2020-07-07