我有这两个代码。第一个使用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');
}
});
});