我正在与Multer和Multer S3合作,允许用户在Node项目上传图像。我希望用户能够上传3张图片,无论其大小如何,但不能再上传。如果用户试图选择说6张图片,我会收到此错误页面:
Error: Unexpected field
at makeError
如何更改下面的代码,以禁止用户选择/上传超过3张图片和/或以更好的方式处理错误。
部分代码:
router.post("/", upload.array('image', 3), function(req, res, next){
var filepath = undefined;
var filepath2 = undefined;
var filepath3 = undefined;
if(req.files[0]) {
filepath = req.files[0].key;
}
if(req.files[1]) {
filepath2 = req.files[1].key;
}
if(req.files[2]) {
filepath3 = req.files[2].key;
}.....
更新:
我添加了这个,现在我登陆“太多文件”错误页面,如果用户尝试上传超过3个。现在我只需要弄清楚如果文件太多会重定向。
var upload = multer({
limits : { files: 3 },
答案 0 :(得分:1)
我不拥有此代码,但我想在@Samip Suwal 的回答中发表评论,因为我是 stackoverflow 的新手,并且没有足够的声誉来发表评论。
确保您输入“图像”而不是“图像”以使验证生效
var upload = multer().array('images', 3);
router.post("/", function(req, res, next){
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
return res.status(400).json('Number of images must be limit up to 3');
} else if (err) {
console.log(err)
}
//no multer error proceed with your normal operation ...
})
});
我在没有将“图像”更改为“图像”的情况下对其进行了测试,即使我上传了 3 个或更少的图像,它也会给我一个错误。那个简单的复数形式对我很有帮助。
答案 1 :(得分:0)
所以我玩了multer,这是我能够工作的东西。
定义你的multer设置
var upload = multer().array('image', 3);
然后将您的功能修改为
router.post("/", function(req, res, next){
upload(req, res, function (err) {
if (err) {
//redirect your user here ...
return;
}
//no multer error proceed with your normal operation ...
})
});
我希望这会有所帮助。