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
回调中执行此图像数据解析。