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

如何通过POST方法在Express中接收Postman/Next.js发送的文件

解决Express无法接收form-data请求体的问题

核心原因

Express默认的body-parser中间件不支持解析multipart/form-data类型的请求,必须用专门的处理库,最常用的就是multer——你之前用无效大概率是配置或使用方式不对。

正确解决步骤

  1. 重新安装multer
    先确保依赖安装到位,执行:

    npm install multer --save
    
  2. 正确配置并使用multer
    以下是完整的示例代码,覆盖单文件、多文件及普通字段的接收:

    const express = require('express');
    const multer = require('multer');
    const app = express();
    
    // 配置multer的存储路径和文件名(如果不需要自定义,也可以直接用multer({ dest: 'uploads/' }))
    const storage = multer.diskStorage({
      destination: function (req, file, cb) {
        // 确保uploads文件夹存在,否则会报错
        cb(null, 'uploads/');
      },
      filename: function (req, file, cb) {
        // 自定义文件名,避免重复
        cb(null, Date.now() + '-' + file.originalname);
      }
    });
    
    const upload = multer({ storage: storage });
    
    // 接收单文件:字段名要和Postman里的一致,比如Postman里文件字段叫'file',这里就写upload.single('file')
    app.post('/upload', upload.single('file'), (req, res) => {
      // 普通字段存在req.body里
      console.log('普通字段:', req.body);
      // 上传的文件存在req.file里
      console.log('上传的文件:', req.file);
      res.send('文件上传成功');
    });
    
    // 接收多文件:比如Postman里有多个文件字段都叫'files',用upload.array('files', 5)(5是最大数量)
    app.post('/uploads', upload.array('files', 5), (req, res) => {
      console.log('普通字段:', req.body);
      console.log('上传的文件列表:', req.files);
      res.send('多个文件上传成功');
    });
    
    app.listen(3000, () => {
      console.log('服务启动在3000端口');
    });
    
  3. Postman端的验证要点

    • 确保请求方法是POST,请求URL正确
    • form-data里的文件字段名,必须和代码中upload.single('xxx')或upload.array('xxx')里的xxx完全一致
    • 如果有普通文本字段,也要放在form-data里一起发送

常见坑排查

  • uploads文件夹不存在:multer不会自动创建存储目录,要手动在项目根目录创建uploads文件夹,否则会报权限错误
  • multer中间件没挂载到对应路由:比如你把upload中间件加在了全局,但路由里没用到,或者路由里用的字段名和Postman不一致
  • 用了其他冲突的中间件:比如同时用了body-parser.urlencoded()和multer,虽然不冲突,但要确保multer的中间件在路由之前挂载
  • 文件大小超出multer默认限制:默认单文件最大1MB,如果要传大文件,需要在multer配置里加limits: { fileSize: 1024 * 1024 * 10 }(比如设置10MB)

测试验证

启动服务后,用Postman发送form-data请求,然后看控制台输出的req.body和req.file/req.files,如果能打印出数据,说明配置成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:57:09