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

如何在Express.js中解析multipart/mixed类型的请求体?

Express 解析 multipart/mixed 请求体方案

方案1:使用 multer 第三方包(推荐)

multer 是专门处理 multipart 类型请求的 Node.js 中间件,原生支持 multipart/mixed 格式,不需要额外复杂配置,可直接解决默认 req.body 返回空对象的问题。

操作步骤

  1. 安装依赖
npm install multer
  1. 编写 Express 路由逻辑
const express = require('express');
const multer = require('multer');
const app = express();

// 配置multer默认用内存存储,适合小体积的JSON和普通文件
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

// 配置需要接收的字段:对应请求中的request(JSON附件)、file1(XML文件)
const uploadFields = upload.fields([
  { name: 'request', maxCount: 1 },
  { name: 'file1', maxCount: 1 }
]);

// 路由处理POST请求
app.post('/', uploadFields, (req, res) => {
  // 提取request字段的JSON内容
  const jsonBuffer = req.files['request'][0].buffer;
  const jsonData = JSON.parse(jsonBuffer.toString('utf8'));
  
  // jsonData就是你需要的数组对象
  console.log(jsonData);
  
  // 若需要XML文件内容可同理获取
  const xmlBuffer = req.files['file1'][0].buffer;
  const xmlContent = xmlBuffer.toString('utf8');

  res.send('解析成功');
});

app.listen(3000, () => {
  console.log('服务启动在3000端口');
});

补充说明

  • 如果上传的文件体积较大,可以配置 multer 将文件存储到本地磁盘,避免占用过多内存,仅需修改storage配置即可。
  • 如果不需要严格限制接收的字段,可以用upload.any()代替upload.fields(),适配动态字段的场景。

方案2:自行实现解析器(不推荐,仅做参考)

如果不想引入第三方依赖,可以按照 multipart 协议的规则自己实现解析逻辑,核心步骤如下:

  • 从请求头的content-type字段中提取分隔边界boundary值
  • 读取完整的原始请求体buffer,用boundary将buffer分割为多个独立的part块
  • 对每个part块,拆分头部和内容两部分:
    • 解析头部的Content-Disposition拿到字段名、文件名
    • 解析头部的Content-Type拿到内容类型
    • 提取内容部分的buffer
  • 对类型为application/json的内容,将buffer转字符串后执行JSON.parse得到JSON对象

自行实现需要注意边界值、编码、大文件流式处理等问题,生产环境优先使用成熟的第三方包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:36:03