【问题标题】:MulterError: Unexpected field at wrappedFileFilter in InsomniaMulterError:Insomnia 中 WrappedFileFilter 的意外字段
【发布时间】:2020-12-07 19:14:31
【问题描述】:

我正在尝试上传用户在应用中注册的图片。当我试图在失眠中测试它时,我收到以下错误:MulterError: Unexpected field at WrappedFileFilter

我一直在网上阅读,我知道当客户端提供的字段名称与服务器期望的字段名称不匹配时会发生此错误。但是,我已经检查了很多次我的代码,并且我在服务器和客户端(Insomnia)中给出的名称是相同的:“图像”。知道我还能尝试什么吗?

这是我的代码:

const storage = multer.diskStorage({
    destination: './client/public/img',
    filename: (req, file, cb) => {
        console.log(file)
        cb(null, file.originalname)
    }
})

const fileFilter = (req, file, cb) => {
    if(file.mimetype == "image/jpeg" || file.mimetype == "image/png") {
        cb(null, true)
    } else {
        cb(null, false)
    }
}

const upload = multer({ storage: storage, fileFilter: fileFilter, destination: './client/public/img' })
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

//sign up
routes.post("/register", upload.single("image"), (req, res) => {
    let { user_name, email, password, password2 } = req.body;
    let { image } = req.file.filename
    let errors = []

    //check required inputs
    if(!user_name || !email || !password || !password2){
        errors.push({message: "Please fill all required fields"})
        res.send({message: "Please fill all required fields"})   
    }

    //check passwords
    if(password != password2) {
        errors.push({message: "Passwords do not match"})
        res.send({message: "Passwords do not match"})
    }

    if(errors.length>0) {
        console.log(errors);
    } else {
        if(email) {
            db(`SELECT * FROM user WHERE email = "${email}"`)
            .then((results) => {
                if(results.data.length>0){
                    res.send("Email exists")
                } else {
                    bcrypt.hash(password, saltRounds, (err, hash) => {
                    password = hash
                    db(`INSERT INTO user (user_name, email, password, image) VALUES ("${user_name}", "${email}", "${password}", "${image}")`)
                        .then((results) => {
                            res.send("Registration successful")
                            if(err)throw err;
                        })
                        .catch((error) => {
                            console.log(error)
                        })
                    })
                }
            })
            .catch((error) => {
                console.log(error)
            })
        } else {
            res.send("Enter email")
        }
    }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 您是如何上传文件的? name 属性 image 在您的 upload.single() 方法中是否相同?
  • 啊啊啊你给了我钥匙!!我太笨了!我写的是“图像”而不是图像,它现在可以工作了。现在我必须处理另一个错误,但图像存储正确。谢谢。
  • 很高兴答案对您有所帮助?

标签: javascript node.js express multer


【解决方案1】:

我假设您正在使用form 上传您的文件。如果,那么……

前端sn-p:

<form action="/register" method="post" enctype="multipart/form-data">
  <input type="file" name="image" />
</form>

让multer正确上传文件:

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './client/public/img')
  },
  filename: function (req, file, cb) {
    if(file.mimetype == "image/jpeg" || file.mimetype == "image/png") {
      cb(null, file.fieldname + '-' + Date.now());
    } 
    else {
     cb(new MulterError('LIMIT_UNEXPECTED_FILE', file.fieldname));
    }
});
 
const upload = multer({ storage: storage });

通过如下调用上传来处理 Express 中间件内部的错误...

app.post('/profile', function (req, res) {
  upload(req, res, function (err) {
    if (err instanceof multer.MulterError) {
      // A Multer error occurred when uploading.
    } else if (err) {
      // An unknown error occurred when uploading.
    }
 
    // Everything went fine.
  })
})

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 2015-10-10
    • 2020-10-01
    • 2016-06-14
    • 2021-02-15
    • 2018-04-13
    • 2014-08-16
    • 2017-11-23
    相关资源
    最近更新 更多