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

如何在Postman中通过form-data同时发送图片与数据(Node.js+Sequelize)

解决Postman form-data传图片+数据返回空对象的问题

1. 后端核心配置(Express + Multer)

form-data属于multipart/form-data类型,Express默认的express.json()和express.urlencoded()无法解析这种格式,必须用multer处理文件与普通字段。

  • 安装multer:
npm install multer
  • 配置multer并挂载中间件:
const express = require('express');
const multer = require('multer');
const app = express();

// 两种存储方式二选一:
// 方式1:内存存储(适合后续上传到云存储)
const storage = multer.memoryStorage();
// 方式2:磁盘存储(直接保存到服务器本地)
// const storage = multer.diskStorage({
//   destination: (req, file, cb) => {
//     cb(null, './uploads/') // 需手动创建uploads文件夹
//   },
//   filename: (req, file, cb) => {
//     cb(null, Date.now() + '-' + file.originalname)
//   }
// })

const upload = multer({ storage: storage });

// 处理单个图片+普通字段的路由,'image'对应Postman中的文件字段名
app.post('/api/upload', upload.single('image'), async (req, res) => {
  try {
    // 普通字段从req.body获取
    const { name, description, price } = req.body;
    // 图片文件从req.file获取
    const imageFile = req.file;

    // 用Sequelize创建数据实例
    const product = await Product.create({
      name,
      description,
      price: parseFloat(price), // 注意转换字段类型匹配Sequelize定义
      image: imageFile.buffer.toString('base64') // 内存存储时转base64,磁盘存储则存imageFile.path
    });

    res.status(201).json({ success: true, data: product });
  } catch (err) {
    res.status(500).json({ success: false, error: err.message });
  }
});

2. Postman正确操作步骤

必须切换到form-data格式,不能用raw/json:

  • 新建POST请求,填入接口地址(如http://localhost:3000/api/upload)
  • 切换到Body标签,选择form-data选项
  • 添加普通字段:比如name(值填商品名称)、description(填描述)、price(填19.99),字段类型保持默认Text
  • 添加图片字段:点击Add Field,字段名填image(必须和后端upload.single('image')中的名称完全一致),字段类型切换为File,点击Select Files选择要上传的图片
  • 点击Send发送请求

3. 常见踩坑点

  • 字段名不匹配:后端upload.single('xxx')中的xxx必须和Postman文件字段名完全一致,否则req.file会是undefined
  • 未挂载multer中间件:如果路由没加upload.single('image'),Express无法解析form-data,导致req.body为空对象
  • Sequelize字段类型不匹配:比如price字段定义为DECIMAL时,需把req.body中的字符串转为数字再存储,否则会报错
  • 磁盘存储时未创建目录:用diskStorage时,必须手动创建指定的uploads文件夹,否则multer会抛出存储错误

4. 调试排查方法

如果仍拿不到数据,可在路由中先打印调试信息:

app.post('/api/upload', upload.single('image'), (req, res) => {
  console.log('req.body:', req.body);
  console.log('req.file:', req.file);
  res.send('调试信息已输出到控制台');
});
  • 若req.body为空,说明multer中间件未生效
  • 若req.file为空,说明文件字段名不匹配或未正确选择文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:13:20