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

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

解决Postman发送Multer请求时req.body/req.file异常的问题

我来帮你捋清楚这个问题——你遇到的情况不是Postman的Bug,主要是请求设置的细节没做对,毕竟Postman和浏览器/Axios在自动处理请求头的逻辑上有区别,咱们一步步来修正:

核心问题:错误取消了Content-Type请求头

你提到取消了Postman里的Content-Type头,这反而会导致服务器无法正确解析multipart/form-data类型的请求。当发送包含文件的表单请求时,必须要有正确的Content-Type头,且要包含自动生成的boundary分隔符。Axios在发送FormData时会自动帮你处理这个头,但Postman里如果手动取消,服务器就不知道怎么拆分请求里的文件和表单数据了。

Postman的正确设置步骤

按照下面的步骤重新配置请求,就能解决问题:

  • 打开Postman,选择POST请求,填入正确的接口地址(比如http://localhost:xxx/api/auth/test)。
  • 切换到Body标签,选中form-data选项(不要选raw或其他类型)。
  • 添加文件字段:
    • 键名填profilePicture(必须和你Multer代码里upload.single('profilePicture')的参数完全一致)。
    • 右侧类型选择File,然后点击“Select Files”选择要上传的文件。
  • 如果需要发送表单数据(对应req.body),继续添加新的键值对:
    • 键名填你需要的字段名(比如username),右侧类型选择Text,然后填入对应的值。
  • 不要手动修改或删除Content-Type请求头:Postman会自动为form-data请求生成正确的multipart/form-data; boundary=----WebKitFormBoundaryxxx头,这个boundary是服务器解析请求的关键,手动干预会导致解析失败。

代码里的小细节修正(无关Postman问题,但能避免混淆)

你的Controller代码里用了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})
}

验证效果

按照上面的设置重新发送请求,你应该就能看到控制台输出正常的req.body和req.file,接口返回的JSON也能正确包含表单数据和文件信息了。

内容的提问来源于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 07:55:54