我的NodeJS-Server收到base64编码的图片。
data:image/jpeg;base64,/9j/4QCcRXhpZgAASUkqAAgAAAA ... CiiigD//Z
接收的数据应保存为jpg。因此我使用Buffer和FileSystemWriter:
var imageBuffer = new Buffer(data, 'base64'); //console = <Buffer 75 ab 5a 8a ...
fs.writeFile("test.jpg", imageBuffer, function(err) { //... });
fs.writeFile不会调用错误。保存了jpeg文件,但我无法打开它。 Image-Viewer说:
File is damaged or too big.
原始文件大6kb,新文件大7kb。
答案 0 :(得分:102)
您必须从中删除网址元信息data:image/jpeg
部分。 (重申@CBroe所说的)这是一个从输入字符串返回正确信息的小函数。
var data = 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA..kJggg==';
function decodeBase64Image(dataString) {
var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/),
response = {};
if (matches.length !== 3) {
return new Error('Invalid input string');
}
response.type = matches[1];
response.data = new Buffer(matches[2], 'base64');
return response;
}
var imageBuffer = decodeBase64Image(data);
console.log(imageBuffer);
// { type: 'image/jpeg',
// data: <Buffer 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 b4 00 00 00 2b 08 06 00 00 00 d1 fd a2 a4 00 00 00 04 67 41 4d 41 00 00 af c8 37 05 8a e9 00 00 ...> }
然后您可以使用上述方法保存缓冲区。
fs.writeFile('test.jpg', imageBuffer.data, function(err) { ... });
答案 1 :(得分:29)
另一种方法是在删除元信息后使用带有编码选项fs.writeFile
的{{1}}。
base64
答案 2 :(得分:1)
尝试这种简单的方法
var imgData = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA..kJggg==';
var base64Data = imgData.replace(/^data:image\/png;base64,/, "");
require("fs").writeFile("out.png", base64Data, 'base64',
function(err, data) {
if (err) {
console.log('err', err);
}
console.log('success');
});
专注于此处1)data:image/png;base
这里有png
2)replace(/^data:image\/png;
png
,名称必须保存为3)writeFile("out.png
{{1} }
答案 3 :(得分:0)
在这里您可以使用这种方式进行我所做的少量更改
var imgData = req.body.image;// coming from client request
var base64Data = imgData.split(",")[1];// split with `,`
require("fs").writeFile(Date.now()+"filename.jpeg", base64Data, 'base64',
function(err, data) {
if (err) {
console.log('err', err);
}
console.log(data,"data");
最后,您的文件将看起来像1572341624757filename.jpeg