我在mongodb中保存默认照片时遇到问题。用户可以上传照片,并且可以毫无问题地保存在数据库中。但是,当用户没有上传他的照片时,我想添加默认照片。 这是我添加的代码的一部分:
busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
console.log("file");
defaultPhoto = false;
file.pipe(fs.createWriteStream(saveTo));
newProfile.photo.contentType = mimetype;
});
busboy.on('field', (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) => {
if(fieldname == "voice") {
newProfile.voice.data = val;
newProfile.voice.contentType = 'audio/webm';
} else {
newProfile[fieldname] = val;
}
});
busboy.on('finish', () => {
if(defaultPhoto) {
newProfile.photo.contentType = 'image/png';
newProfile.photo.data = fs.readFileSync(path.join(__dirname + '/../images/', "profile-default.png"));
} else {
newProfile.photo.data = fs.readFileSync(saveTo);
fs.unlink(saveTo);
}
newProfile.alias = newProfile.firstName + "" + newProfile.surname;
newProfile.alias = newProfile.alias.toLowerCase();
Profile.addProfile(newProfile, (err) => {
if(err) console.log(err);
})
使用此代码,上传工作正常,但当用户没有上传他的照片时,我有错误: ValidationError:配置文件验证失败:照片:转换为对象失败,值为" null"在路径"照片"
感谢您的帮助。
答案 0 :(得分:0)
首先,出于性能原因,将图像存储在数据库中通常不是一个好主意。最好将图像存储在服务器上,然后在数据库中存储对它们的引用。
其次,我猜这一行造成了问题:
newProfile.photo.data = fs.readFileSync(path.join(__dirname + '/../images/', "profile-default.png"));
newProfile.photo.data
设置为null
,因为对readFileSync
的调用正在返回null
。检查您确实将默认配置文件照片存储在您传递给它的目录中。