【发布时间】: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