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

Next.js中Axios请求遇'content-type missing boundary'及getBoundary报错的解决方法

Next.js中Axios调用multipart/form-data接口的问题解决

原代码

getCarouselData: async (params) => {
  let bodyFormData = new FormData();
  for (let key in params) {
    bodyFormData.append(key, params[key]);
  }
  return axios({
    method: "post",
    url: `${baseURL}/getCarouselData`,
    data: bodyFormData,
    headers: { "Content-Type": `multipart/form-data;};` },
  });
};

遇到的问题

  • 设置Content-Type: "multipart/form-data;"时,出现content-type missing boundary错误
  • 设置Content-Type: "multipart/form-data; boundary=${bodyFormData.getBoundary()};"时,出现bodyFormData.getBoundary is not a function错误
  • 移除Content-Type或不设置headers时,出现unsupported content-type错误

注:上述场景均能收到API响应,且Postman中请求正常。

解决方案

核心原因

手动设置multipart/form-data类型时,必须携带动态生成的boundary(用于分隔表单字段),而不同环境下的FormData实现差异(浏览器 vs Node.js)会导致手动获取boundary失败;同时部分服务器要求必须显式指定multipart/form-data类型,不能依赖自动推断。

具体修复步骤

1. 浏览器客户端环境(Next.js客户端组件)

直接删除手动设置的Content-Type,让Axios自动处理请求头——Axios会识别data为FormData,自动生成包含正确boundary的Content-Type:

getCarouselData: async (params) => {
  let bodyFormData = new FormData();
  for (let key in params) {
    bodyFormData.append(key, params[key]);
  }
  return axios({
    method: "post",
    url: `${baseURL}/getCarouselData`,
    data: bodyFormData
    // 移除手动headers设置
  });
};

如果服务器仍返回unsupported content-type,尝试显式调用浏览器FormData的getHeaders方法(部分现代浏览器支持):

getCarouselData: async (params) => {
  let bodyFormData = new FormData();
  for (let key in params) {
    bodyFormData.append(key, params[key]);
  }
  return axios({
    method: "post",
    url: `${baseURL}/getCarouselData`,
    data: bodyFormData,
    headers: {
      ...(bodyFormData.getHeaders?.())
    }
  });
};

2. Next.js服务端环境(API路由、getServerSideProps等)

Node.js原生FormData(v18+支持)没有getBoundary或getHeaders方法,建议使用第三方form-data包来处理:

  • 先安装依赖:
npm install form-data
  • 修改代码:
import FormData from 'form-data'; // 或require

getCarouselData: async (params) => {
  let bodyFormData = new FormData();
  for (let key in params) {
    bodyFormData.append(key, params[key]);
  }
  return axios({
    method: "post",
    url: `${baseURL}/getCarouselData`,
    data: bodyFormData,
    headers: bodyFormData.getHeaders() // 自动生成带boundary的Content-Type
  });
};

为什么Postman正常?

Postman会自动为multipart/form-data请求生成并添加正确的boundary和Content-Type,无需手动配置,因此不会出现上述错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:55:32