You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Multer中间件在Postman中req.body为空、req.file未定义问题排查

解决Postman发送Multer请求时req.body空、req.file undefined的问题

首先可以确定的是:这不是Postman的Bug,毕竟你用React+Axios能正常请求,说明你的后端Multer配置和代码逻辑是完全没问题的,问题出在Postman的请求设置细节上。下面是具体的排查和解决步骤:

1. 确保Postman使用正确的请求格式

Multer专门用于处理multipart/form-data类型的请求,所以在Postman里必须做以下设置:

  • 在请求的Body标签页,选择form-data选项(不要选raw、x-www-form-urlencoded等其他格式)
  • 文件字段的Key必须和你Multer配置的一致:也就是profilePicture(因为你用的是upload.single('profilePicture')),并且这个字段的类型要选择File,然后在右侧选择本地要上传的文件
  • 如果有文本参数(比如req.body里的内容),也要把它们添加到form-data的列表中,类型选择Text,填写对应的Key和Value

2. 不要手动修改Content-Type请求头

你提到已经取消了Postman中的Content-Type头,但这里有个关键细节:
当你在Postman中选择form-data时,Postman会自动生成正确的Content-Type头,格式类似:

multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

这个boundary是请求的分隔符,Multer需要它来解析表单数据。如果你手动删除或修改了这个头,Postman可能无法正确生成边界,导致Multer解析失败,出现req.body空、req.file undefined的情况。

正确的做法是:

  • 不要在Headers标签页手动添加或删除Content-Type头
  • 切换到Body标签页重新选择一次form-data,让Postman自动生成正确的Content-Type

3. 检查文件大小和后端路径(可选验证)

  • 确认你在Postman中上传的文件大小没有超过你设置的10MB限制(limits: {fileSize: 1024 * 1024 * 10})
  • 验证你的Multer存储路径../uploads/是否正确:这个路径是相对于Node.js进程的启动目录,比如如果你的app.js在项目根目录,路由文件在routes/文件夹下,那么../uploads/指向的是根目录下的uploads文件夹,确保这个文件夹存在(Multer不会自动创建目录,不过你Axios能正常工作说明目录是存在的,这点可以忽略)

小细节提醒

你的控制器代码里打印的是req.files,但因为你用的是upload.single(),正确的应该是req.file(单数),不过这只是打印的小问题,不影响请求解析,改过来能更准确看到结果:

const test = (req, res) => {
  console.log(req.body)
  console.log(req.file) // 这里改成单数file
  res.json({body:req.body, file:req.file})
}

按照上面的步骤调整Postman的设置后,应该就能正常获取到req.body和req.file了。

内容的提问来源于stack exchange,提问作者George Bagiryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:02:45