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

Next.js 13服务端转发上传文件至第三方API报400,求排查

问题分析与解决

你的问题核心出在手动指定multipart/form-data请求头上。当用axios发送FormData时,axios会自动生成包含boundary的正确Content-Type头(格式类似multipart/form-data; boundary=----WebKitFormBoundaryXXXX),手动设置的话会丢失关键的boundary参数,导致第三方服务器无法正确解析表单数据,最终返回400错误。

即便去掉请求头后仍报错,大概率是FormData的字段名和第三方服务器要求不匹配,或是文件对象传递过程中出现异常。

修正后的代码

import axios from "axios"
import { NextRequest, NextResponse } from "next/server"

export async function POST(request: NextRequest) {
  try {
    const formData = await request.formData()
    const route = `${process.env.API_URL}/Api/SendContact`

    // 移除手动设置的Content-Type,让axios自动处理表单头
    const response = await axios.post(route, formData, {
      headers: {
        // 若第三方服务器需要授权等其他头,在此添加,不要加Content-Type
      },
    })

    return NextResponse.json(response.data)
  } catch (error) {
    // 捕获错误并打印详情,方便排查问题
    console.error("转发请求失败:", error)
    return NextResponse.json(
      { message: "请求转发失败", error: (error as Error).message },
      { status: 500 }
    )
  }
}

额外排查步骤

  • 对比Swagger调用的请求参数,确保FormData中的字段名(包括大小写)和第三方服务器要求完全一致。
  • 检查第三方服务器是否需要额外请求头(如授权token),如果有,需在axios的headers配置中补充。
  • 可以在代码中打印FormData内容,确认文件和其他字段是否被正确解析:
    for (const [key, value] of formData.entries()) {
      console.log(key, value)
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:34:54