在NodeJS中使用Multer处理自定义图片HTTP请求
处理req.body中的Buffer图片数据
因为Multer是专门处理multipart/form-data类型的文件上传(即表单上传文件的场景),而你的请求是把Buffer放在JSON格式的请求体里发送,所以不需要用Multer,直接从req.body解析处理即可,步骤如下:
1. 确保Server 2配置JSON解析中间件
在Server 2的Express应用中,先添加express.json()中间件,同时设置足够大的请求体限制,避免图片Buffer过大导致解析失败:
const express = require('express'); const app = express(); // 解析JSON请求体,根据图片大小调整limit值 app.use(express.json({ limit: '10mb' }));
2. 从req.body还原Buffer并处理
axios发送JSON请求时,会把Node.js的Buffer对象序列化为{ type: "Buffer", data: [字节数组] }的结构,所以在Server 2中需要将这个结构还原为Buffer,之后就能保存为文件或做其他处理:
app.post('/', (req, res) => { // 获取序列化后的Buffer数据 const serializedBuffer = req.body.buffer; // 还原为Node.js Buffer对象 const imageBuffer = Buffer.from(serializedBuffer.data); // 示例:将Buffer保存为图片文件 const fs = require('fs'); fs.writeFile('./received-image.jpg', imageBuffer, (err) => { if (err) { return res.status(500).send('图片保存失败'); } res.send('图片接收并保存成功'); }); // 处理其他附带数据 const otherData = req.body.otherData; console.log('接收的其他数据:', otherData); });
可选优化:Server 1端调整请求格式
如果不想在Server 2端手动还原Buffer,也可以在Server 1端把Buffer转为Base64字符串发送,Server 2端直接解码即可:
Server 1修改后的请求代码:
await axios.post('http://localhost:5001/', { buffer: fileBuffer.toString('base64'), ...otherData })
Server 2对应处理代码:
app.post('/', (req, res) => { const base64Str = req.body.buffer; const imageBuffer = Buffer.from(base64Str, 'base64'); // 后续保存或处理逻辑同上 });
内容的提问来源于stack exchange,提问作者Mumbarun
相关产品推荐
相关产品推荐

