NodeJS中Multer upload.fields返回req.files为undefined问题求助
Node.js 双文件上传时 req.files 返回 undefined 问题排查
此前正常运行的Node.js双文件上传功能,现在出现req.files返回undefined的情况,相关代码如下:
路由代码
router.post("/api/upload", upload.fields([{ name: 'data', maxCount: 1 }, { name: 'song', maxCount: 1 }]), function(req,res){ console.log(req.files); data = req.files["data"][0]; song = req.files["song"][0]; path_data = "uploads/" + data.filename; path_song = "uploads/" + song.filename; console.log(data, path_data, song, path_song); makeStage(path_data, path_song, req, function(result) { res.send(toString(result)); }); });
Multer 配置代码
const multer = require('multer'); const storage = multer.diskStorage({ destination: function(req, file, cb) { cb(null, 'uploads/') }, filename: function(req, file, cb) { cb(null, file.fieldname + '-multer') } }); const upload = multer({storage});
前端HTML代码
<form action=/api/upload method="post" enctype="multipart/form-data"> <label>Level Data</label> <input type="file" name="data" accept=".txt"> <hr> <label>Level Song</label> <input type="file" name="song" accept=".mp3"> <hr> <button type="submit">Upload</button> </form>
常见排查方向
- 确认
uploads目录是否存在:Multer不会自动创建目标目录,若该文件夹被删除,会导致文件无法保存,进而req.files无数据,手动创建目录后重试。 - 检查Multer中间件挂载:确保路由中使用的
upload是正确配置的实例,未被覆盖或未正确导入。 - 前端表单校验:提交时确认两个文件均已选择,且表单
enctype="multipart/form-data"属性无拼写错误。 - 查看请求头:在路由中打印
req.headers,确认content-type包含multipart/form-data,排除请求格式问题。 - 目录权限检查:确认Node.js进程拥有
uploads目录的读写权限。 - 版本兼容验证:若近期更新过Multer包,可能存在版本兼容问题,尝试回退至之前正常运行的版本。
内容的提问来源于stack exchange,提问作者za1
相关产品推荐
相关产品推荐

