我正在创建一个博客网站,并试图给予用户能够上传个人资料图片,我一直在尝试multer和各种配置,它一直告诉我错误:ENOENT:没有这样的文件或目录,打开'public/uploads/无论是这个还是请求通过,但没有图像被保存,有人能帮忙吗?
我的用户模式
username: String,
email: String,
password: String,
profileImg:Buffer,
googleId: String,
facebookId:String,
twitterId:String,
created:{type: Date, required: true, default: Date.now}
});
const storage = multer.diskStorage({
destination: function(req, file, cb){
cb(null, './uploads');
},
filename : function(req, file, cb){
cb(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);
}
});
const upload = multer({
storage: storage,
});
post request to update users profile
app.post("/profilepic", upload.single("image"), (req, res)=>{
console.log(req.file);
User.updateOne({_id:req.user._id}, {$set:{profileImg: req.body.filename}}, (err)=>{
if(err){console.log(err);}else{res.redirect("/settings")}
})
console.log(req.user);
});
1条答案
按热度按时间yyyllmsg1#
您似乎正在尝试保存文件名,而不是实际文件。在架构中,您将profileImg属性定义为Buffer,因此您可以先读取文件(使用“fs”节点模块),然后尝试使用updateOne方法发送它。
另一种存储图片的方法是在文本字段中,你可以将服务器上存储的图片转换为base64格式,然后保存在mongo中,当你需要图片时,你可以获取base64格式,然后将其转换回文件。