我的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文件已保存,但无法打开。图像查看器说:
File is damaged or too big.
原始文件大6kb,新文件大7kb。
您必须从其中剥离url元信息data:image/jpeg。(重申@CBroe所说的)这是一个小函数,用于从输入字符串返回正确的信息。
data:image/jpeg
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) { ... });