NodeJS写入base64图像文件

lyr7nygr  于 2023-03-01  发布在  Node.js
关注(0)|答案(5)|浏览(197)

我的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.

原始文件为6 kb,新文件为7 kb。

drnojrws

drnojrws1#

您必须从它中剥离url meta信息,即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) { ... });
u5rb5r59

u5rb5r592#

另一种方法是在剥离 meta信息之后使用带有编码选项base64fs.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
});
rmbxnbpk

rmbxnbpk3#

在这里你可以用我做的小改动

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

eni9jsuy

eni9jsuy4#

试试这个简单的方法

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.pngpng

uwopmtnx

uwopmtnx5#

var crypto = require('crypto');
var seed = crypto.randomBytes(20);
var uniqueSHA1String = crypto.createHash('sha1').update(seed).digest('hex');
var imageTypeRegularExpression = /\/(.*?)$/;

var imageBuffer = this.decodeBase64Image(createSlideshowDto.base64);
var imageTypeDetected = imageBuffer.type.match(imageTypeRegularExpression);

var data = createSlideshowDto.base64.replace(
  /^data:image\/\w+;base64,/,
  '',
);
console.log(data);
fs.writeFile(
  `./files/base64-${uniqueSHA1String}.${imageTypeDetected[1]}}`,
  data,
  { encoding: 'base64' },
  function (err) {
    //Finished

    console.log(err);
  },
);

相关问题