我正在构建的应用程序的功能之一允许在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上传到上传文件夹,并为上传图像的每个用户保存了通往文件的路径。
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');
});