如何在Express.js中解析multipart/mixed类型的请求体?
Express 解析
multipart/mixed 请求体方案 方案1:使用 multer 第三方包(推荐)
multer 是专门处理 multipart 类型请求的 Node.js 中间件,原生支持 multipart/mixed 格式,不需要额外复杂配置,可直接解决默认 req.body 返回空对象的问题。
操作步骤
- 安装依赖
npm install multer
- 编写 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
相关产品推荐
相关产品推荐

