小编典典

如何将 base64 编码的图像保存到磁盘?

all

我的 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
});

阅读 118

收藏
2022-06-18

共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

2022-06-18