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

如何将Express.Multer.File类型的文件添加到FormData对象中

解决Express.Multer.File添加到FormData转发报错问题

错误原因

TypeError: source.on is not a function 错误的核心原因是:Express.Multer.File 是Multer解析上传后生成的内存对象,默认包含文件buffer、元信息,但不是FormData库要求的可读流/本地文件实例,直接传入append方法会导致底层流处理逻辑失效。

正确实现步骤

方法1:直接传入buffer+手动指定文件元信息(最常用)

无需额外转换,直接使用Multer返回的buffer属性搭配元信息即可:

import FormData from 'form-data';
// 假设你接收到的Multer文件对象变量名为uploadedFile
const form = new FormData();
form.append(
  'randomword', // 对应目标接口的文件字段名
  uploadedFile.buffer, // 直接传入Multer返回的文件buffer
  {
    filename: uploadedFile.originalname, // 原始文件名
    contentType: uploadedFile.mimetype // 文件MIME类型
  }
);

方法2:转换为可读流后传入

如果你的场景需要用流的方式处理,可以先将buffer转为Node可读流再传入:

import { Readable } from 'stream';
import FormData from 'form-data';

const form = new FormData();
const fileStream = Readable.from(uploadedFile.buffer);
form.append('randomword', fileStream, {
  filename: uploadedFile.originalname,
  contentType: uploadedFile.mimetype
});

注意事项

  • 不要直接传完整Express.Multer.File对象到append方法,必须明确传入buffer属性或转成可读流的结果
  • 第三个参数的文件名、MIME类型建议必填,否则目标API可能无法正常识别文件格式
  • 若使用Axios等请求库发送FormData,需要手动将form.getHeaders()的返回值合并到请求头中,避免边界符缺失导致的解析失败,示例:
import axios from 'axios';
const response = await axios.post('目标接口地址', form, {
  headers: {
    ...form.getHeaders()
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:45:03