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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:01:06