我想使用npm软件包multer将用户个人资料图片上传到服务器。所以我配置了如下所示的multer:
var multer = require('multer');
var storage = multer.diskStorage({
//Setting up destination and filename for uploads
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
cb(null, Date.now() + file.originalname);
}
});
var upload = multer({
storage: storage,
limits:{
fieldSize: 1024*1024*6,
}
});
我也有一个存储电子邮件,密码和图片路径的用户模型:
var makerSchema = new mongoose.Schema({
email:{
type:String,
validate: [validator.isEmail, "Please enter a valid E-mail!" ]
},
password:{
type:String,
required:[true, "Password is a required field"],
minlength: 6,
maxlength:1000
},
imagePath:{
type:String
}
},{
timestamps:true
})
下面是我的路线:
router.post('/maker',upload.single('makerImage'), async (req, res) => {
//Check if image is uploaded(gives no error though)
var imagePath = "";
if (req.file) {
imagePath=req.file.path;
}
//creating body for object
var data = {
email: req.body.email,
password: req.body.password,
imagePath
}
try {
var maker = new Maker(data);
await maker.save();
res.status(200).send();
} catch (error) {
res.send(error);
}
})
现在,虽然我没有输入用户名,但我输入了错误的电子邮件或密码。但是无论如何,文件都会上传到上载文件夹。如何解决此问题?
[我看到upload.single(‘makerImage’)
中间件在您的处理程序之前执行。因此,解决方案之一-拆分输入凭据和图像上传。您将需要单独的路线来上传图片。
因此,首先,您验证登录名和密码,然后可以从UI(使用单独的路由)上载图像。
另一种解决方案:通过multer
临时将图像保存在内存中,然后如果登录名和密码正确,则将其保存到磁盘中