使用Multer上传文件时无法访问filename属性的问题及解决办法
Express使用Multer获取上传文件属性返回undefined问题
问题描述
查阅了大量Multer相关文档后,我确认我的Express服务端配置是正确的,但每次尝试访问传入文件的req.files.filename属性时,返回值都是undefined。
以下是我的Express服务端代码:
const storage = multer.diskStorage({ destination: '../Uploads', filename: (req, file, cb) => cb(null, file.originalname) }); const upload = multer({ storage: storage }); Router.post("/", upload.single("file"), async (req, res) => { debug.log("connected"); debug.log(req.file); debug.log(req.body); if (!req.files) { debug.log("receiving connection but file not found"); res.send({ status: false, message: "No file uploaded", }); } else { debug.log("receiving connection and file found"); try { debug.log(req.files.filename); debug.log("attempting to save file" + req.files); const post = await new Post({ title: req.files.filename, owner: req.body.owner, industry: req.body.industry, });
按照我的理解,调用upload.single后应该可以正常使用req.file.filename属性,但实际无法生效。
问题解决方案
我最终解决了这个问题。
原因是app.use(fileUpload());中间件会和Multer产生冲突:
- 之前启用
app.use(fileUpload());时,可以通过req.files访问到文件,但文件无法保存 - 注释掉
app.use(fileUpload());后,可以通过req.file正常访问文件,且文件可以正确保存
内容的提问来源于stack exchange,提问作者methot-ilya-3ds
相关产品推荐
相关产品推荐

