如何使用Node JS保存base64图像?

时间:2020-02-05 11:28:02

标签: node.js express

我正在使用nodejs保存base64图像,它将图像保存在准确的路径中,但会显示错误。

请帮助我找到错误。

enter image description here

这是我的代码

var express = require('express');
var router = express.Router();

const fs = require('fs');
const mime = require('mime');


const path = './uploads';

router.post('/register', (req, res, next) => {
  const base64Image = req.body.image;

  const matches = base64Image.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]);
  let decodedImg = response;
  let imageBuffer = decodedImg.data;
  let type = decodedImg.type;
  let extension = mime.extension(type);
  let fileName = 'image.' + extension;

  try {
    fs.writeFileSync(path + '/' + fileName, imageBuffer, 'utf8');
    return res.send({ status: 'success' });
  } catch (e) {
    next(e);
  }

  return;

});

module.exports = router;

任何解决方案表示赞赏!

1 个答案:

答案 0 :(得分:3)

您犯的错误是在创建缓冲区时未指定编码。您应该这样创建缓冲区:

new Buffer()已过时,请改用Buffer.from()

let buff = Buffer.from(m[2],'base64'); //编码类型为base64

基本代码段

const fs =  require('fs')
let a =  'base64ImageString'
let m =  a.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
  
let b =  Buffer.from(m[2],'base64');
fs.writeFile('image.png',b,function(err){
  if(!err){
    console.log("file is created")
  }
});

此外,当您向文件写入缓冲区时,不必传递编码类型,但是如果要写入字符串,则必须传递编码类型。

查看此演示 https://repl.it/repls/GrimOfficialLocations

但是不建议将图像作为base64字符串发送。它是 大图像处理效率低下。 base64所花的位比大约多33% 它的二进制等价物。我建议您检查一下: Upload base64 image with Ajax