NodeJS写入base64映像文件

我的NodeJS服务器接收一个图片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。

你必须去掉它的url元信息, data:image/jpeg部分。 (重申什么@CBroe说)这是一个小函数来从inputstring返回正确的信息。

 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) { ... }); 

另一种方法是在fs.writeFile元信息之后使用带编码选项base64 fs.writeFile

 var image = 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA..kJggg=='; var data = image.replace(/^data:image\/\w+;base64,/, ''); fs.writeFile(fileName, data, {encoding: 'base64'}, function(err){ //Finished }); 

试试这个简单的方法

  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;basepng 2) replace(/^data:image\/png;这里也是png和name必须保存3) writeFile("out.png png