Mongodb,tomjs上的mongoose,在db中保存照片

时间:2017-06-26 14:34:38

标签: mongodb mongoose

我在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"在路径"照片"

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

首先,出于性能原因,将图像存储在数据库中通常不是一个好主意。最好将图像存储在服务器上,然后在数据库中存储对它们的引用。

其次,我猜这一行造成了问题:

newProfile.photo.data = fs.readFileSync(path.join(__dirname + '/../images/', "profile-default.png"));

newProfile.photo.data设置为null,因为对readFileSync的调用正在返回null。检查您确实将默认配置文件照片存储在您传递给它的目录中。