最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 2浏览 0评论

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

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

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
});
回答如下:

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

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,它只是一个字节数组。然后你可以把那个字节数组写到文件中。

Update

正如评论中所提到的,req.rawBody不再是一件事。如果您正在使用express / connect,那么您应该使用bodyParser()中间件并使用req.body,如果您使用标准Node执行此操作,那么您需要聚合传入的data事件Buffer对象并在end回调中执行此图像数据解析。

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

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

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
});
回答如下:

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

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,它只是一个字节数组。然后你可以把那个字节数组写到文件中。

Update

正如评论中所提到的,req.rawBody不再是一件事。如果您正在使用express / connect,那么您应该使用bodyParser()中间件并使用req.body,如果您使用标准Node执行此操作,那么您需要聚合传入的data事件Buffer对象并在end回调中执行此图像数据解析。

发布评论

评论列表 (0)

  1. 暂无评论