使用multer将base64解码图像保存到用户集合和磁盘

时间:2018-02-23 00:02:06

标签: node.js express mongoose

我有这两个代码。第一个使用multer为用户保存图像。对于每个用户,它将具有特定名称的上载图像保存在头像字段中,并保存图像的相同名称。如果没有上传图像,则将noimage.png保存为头像字段中的名称。

第二个将base64字符串解码为图片并将其保存到特定路径,但每次上传图像时都会被覆盖。

是否可以实现两个代码以获得第一个代码的功能,但是从base64字符串解码图像?

base64字符串是裁剪图像的结果。我希望用户能够裁剪图像的某个区域,将其显示为头像。

提前致谢。

// Register Proccess
router.post('/register', upload.single('avatar'), function(req, res){


  const username  = req.body.username;
  const email     = req.body.email;
  const password  = req.body.password;
  const password2 = req.body.password2;
  const date      = new Date();


  if(req.file){
    var avatar    = req.file.filename;
  } else {
    var avatar    = 'noimage.png';
  }

  req.checkBody('username', 'Username is required').notEmpty();
  req.checkBody('email', 'Email is required').notEmpty();
  req.checkBody('email', 'Email is not valid').isEmail();
  req.checkBody('password', 'Password is required').notEmpty();
  req.checkBody('password2', 'Passwords do not match').equals(req.body.password);

  let {errors, validationResults} = require('express-validator');

  if(errors){
    res.render('register', {
      errors:errors
    });

  } else{

    let newUser = new User({
      username:username,
      email:email,
      password:password,
      date: date,
      avatar: avatar
    });
    bcrypt.genSalt(10, function(err, salt){
      bcrypt.hash(newUser.password, salt, function(err, hash){
        if(err){
          console.log(err);
        }
        newUser.password = hash;
        newUser.save(function(err){
          if(err){
            console.log(err);
            return;
          } else {
            req.flash('success','You are now registered and can log in');
            res.redirect('/');
          }
        });

      });
    });
  })
});

第二个代码

var upload = multer(); 

router.post('/crop', upload.single('avatar'), function(req, res) {
    let img = req.body.cropped;
    let image = img.split(';base64,').pop();

    fs.writeFile("public/images/uploads/out.png", image, {encoding: 'base64'}, function(err) {
    console.log('File created');
     if(err){
        console.log(err);
        return;
      } else {
        res.redirect('/crop');
      }
}); 
  });

0 个答案:

没有答案