如何使用节点 js 将图像放入 mongodb

How to put image into mongodb using node js

我想将个人资料图片放入 mongodb 中的用户集合中,并且我想在用户获取他的个人资料时检索此图片。

var storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'uploads/')
    },
    filename: (req, file, cb) => {
        cb(null, file.fieldname + '-' + Date.now()+ path.extname(file.originalname));
    }
});
var upload = multer({ storage: storage });
router.put('/user/profile/img/:email', upload.single('profileimg'), (req, res, next) => {
    // console.log(req.file);
    Users.findOneAndUpdate({ email: req.params.email }, req.file.filename).then(() => {
        Users.findOne({ email: req.params.email }).then((resp, err) => {
            res.send(resp);
        })
    })
})

图像正在保存在我的 api 的上传文件夹中,但它没有保存在数据库中。

findOneAndUpdate 函数的第二个参数必须是具有要更新的字段且值为:

的对象
Users.findOneAndUpdate({ email: req.params.email }, { profileimg: req.file.filename }).then(...)

您可以像下面的代码那样做:

router.put('/user/profile/img/:email', upload.single('profileimg'), async (req, res, next) => {
  try {
    // check your file is uploaded
    // check your field
    console.log(req.file);
    const result = await Users.findOneAndUpdate({ email: req.params.email }, {$set: { profileimage : req.file.filename}}, { returnOriginal: false})
    res.send(result)
  } catch(ex) {
    res.status(500).send(ex.message);
  }
})

注:为此{$set: { profileimage : req.file.filename}}

  • profileimage : 更改 mongodb
  • 中的字段
  • req.file.filename: 确保 console.log(req.file) 然后,你要存储的字段,在这里使用它并更改此示例。

希望对您有所帮助