使用 GridFS 和 multer 时如何检索个人资料图像

How can I retrieve profile images when using GridFS and multer

我正在构建的应用程序的一个功能允许用户上传个人资料图片,例如在 facebook、twitter 和 quora 上。

multer 似乎是用来处理从表单上传的信息的,它应该存储在使用 GRidFS 的文件存储系统中。我已经完成了文件上传部分。

如何存储图像以便用户可以访问它们?

var upload = multer({ dest: 'uploads/' });

  // image upload route
app.post('/photos/upload',upload.single('avatar'),       function(req, res) {
      console.log(req.user.img);
      console.log(req.file);
      var user = req.user;
      user.img = req.file;

      user.save(function(err) {
          res.redirect('/profile');
      });

我能够在不使用 GridFs 的情况下解决这个问题。刚刚使用 multer 上传到一个上传文件夹,并为每个上传图像的用户保存了 mongo 集合中文件的路径。

var storage = multer.diskStorage({
  destination: function (req, file, cb){
    cb(null, 'public/uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname + '-' +Date.now())
  }
});
var upload = multer({ storage: storage }).single('avatar');

// to post the path to the database.

app.post('/photos/upload', function(req, res) {
        upload(req, res, function(err) {


            if (err) {
                res.redirect('/profile')
                return res.send("Error uploading file");
            } else if (req.file == null) {

                res.redirect('/profile')
            } else {

                if ((facebook != null) && (local != null)) {
                    User.findOne({

                        'facebook.email': facebook
                    }, function(err, user) {
                        if (err) {
                            return done(err);
                        }

                        console.log(user)
                        user.img = req.file.path

                        user.save(function(err) {
                            if (err) {
                                throw err;
                            }


                        });

                    });
                } else if ((facebook != null) && (local == null)) {
                    User.findOne({

                        'facebook.email': facebook
                    }, function(err, user) {
                        if (err) {
                            return done(err);
                        }

                        console.log(user)
                        user.img = req.file.path

                        user.save(function(err) {
                            if (err) {
                                throw err;
                            }


                        });

                    });
                } else if ((facebook == null) && (local != null))  {
                        User.findOne({

                            'local.email': local
                        }, function(err, user) {
                            if (err) {
                                return done(err);
                            }

                            console.log(user)
                            user.img = req.file.path

                            user.save(function(err) {
                                if (err) {
                                    throw err;
                                }


                            });

                        });
                    }
                }

            })
            res.redirect('/profile');

        });