Multer限制图像被接受

时间:2017-06-06 18:30:47

标签: node.js amazon-web-services express amazon-s3 multer

我正在与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 },

2 个答案:

答案 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 ...

   })
});

我希望这会有所帮助。