NodeJS使用express-fileupload时req.files返回null的问题求助
关于express-fileupload获取req.files为null的解决方案
- 检查是否正确挂载express-fileupload中间件
安装依赖后需要在路由注册前显式挂载中间件,示例代码如下:
const express = require('express'); const fileUpload = require('express-fileupload'); const app = express(); // 必须在注册路由、挂载其他body解析中间件之前挂载 app.use(fileUpload({ // 可选配置,比如限制文件大小为50MB limits: { fileSize: 50 * 1024 * 1024 }, abortOnLimit: true })); // 其他body解析中间件比如express.json()要放在fileUpload之后 app.use(express.json()); app.use(express.urlencoded({ extended: true })); // 业务路由 app.post("/profile-client-save", (req, resp) => { console.log(req.files); resp.send('上传请求已处理'); }); app.listen(3000);
- 检查客户端请求的格式是否正确
上传文件必须使用multipart/form-data格式提交:- 如果是HTML表单提交,需要给form标签添加
enctype="multipart/form-data"属性 - 如果是前端AJAX请求(比如axios、fetch),需要使用FormData对象构造请求体,不要手动修改Content-Type请求头,浏览器会自动生成带边界值的正确头信息
- 如果是HTML表单提交,需要给form标签添加
- 检查上传字段名是否匹配
前端上传时指定的文件字段名需要和后端取值的字段名一致,比如前端FormData中添加文件时用的字段是avatar,后端需要从req.files.avatar取值 - 检查是否存在请求流被提前消费的情况
如果在fileupload中间件之前挂载了其他会解析请求body的中间件(比如express.json、express.urlencoded、body-parser相关中间件),会导致请求流被提前消费,fileupload无法读取到文件数据,必须将fileupload中间件放在所有body解析中间件之前。
内容的提问来源于stack exchange,提问作者Wowz
相关产品推荐
相关产品推荐

