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

Node.js环境下使用Axios v0.27.2发送FormData遇数据转换错误的求助

Node.js环境下使用Axios v0.27.2发送FormData遇数据转换错误的求助

看起来你踩了Axios在Node.js环境下处理FormData的两个常见坑:手动设置Content-Type头导致boundary丢失,以及FormData实例的环境适配问题。我来给你一步步解决:

核心问题分析

你手动设置了headers: { 'content-type': 'multipart/form-data' },这会覆盖Axios自动生成的请求头——而multipart/form-data类型的请求必须携带boundary参数来分隔表单字段,手动设置后Axios无法自动添加这个关键参数,最终导致数据转换失败。另外Node.js环境没有浏览器原生的FormData,如果用了不兼容的实现也会出问题。

解决方案1:使用Node.js 18+内置FormData(无需额外安装包)

Node.js 18及以上版本内置了符合标准API的FormData,和浏览器API完全一致,Axios v0.27.2能完美适配。代码调整如下:

import axios from 'axios';
// Node.js 18+ 直接用内置的FormData
const sendData = new FormData();
// 注意:如果是上传真实文件,要传入文件的二进制数据、文件名等参数
// 比如本地文件可以用fs.readFileSync读取后传入
sendData.append('firmware', 'hello'); 
// 真实文件上传示例:sendData.append('firmware', fs.readFileSync('./firmware.bin'), 'firmware.bin');

(async () => {
  try {
    const axiosInstance = axios.create({});
    const result = await axiosInstance({
      data: sendData,
      // 关键:不要手动设置content-type,让Axios自动生成带boundary的头
      method: 'PUT',
      url: 'http://localhost',
    });
    console.log(result);
  } catch (error) {
    console.error(error);
  }
})();

解决方案2:低版本Node.js(<18)使用form-data包

如果你用的是Node.js 18以下版本,需要安装form-data包,注意不要和浏览器的FormData用法混淆,正确代码如下:

# 先安装依赖
npm install form-data
import axios from 'axios';
import FormData from 'form-data'; // 导入form-data包的FormData

const sendData = new FormData();
sendData.append('firmware', 'hello');
// 真实文件上传示例:sendData.append('firmware', fs.createReadStream('./firmware.bin'), 'firmware.bin');

(async () => {
  try {
    const axiosInstance = axios.create({});
    const result = await axiosInstance({
      data: sendData,
      // 同样不要手动设置content-type,Axios会自动从form-data实例获取头信息
      method: 'PUT',
      url: 'http://localhost',
    });
    console.log(result);
  } catch (error) {
    console.error(error);
  }
})();

关键注意事项

  • 绝对不要手动设置multipart/form-data的Content-Type,必须让Axios自动生成,否则会丢失boundary参数,导致服务端无法解析表单数据。
  • 上传真实文件时,要传入文件的二进制数据(Buffer)、可读流(ReadStream),并指定文件名,这样服务端才能正确识别文件字段。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 13:24:34