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

Next.js使用fetch代理multipart form data请求时文件上传失效如何解决?

问题根因

代码失效的核心原因是 Next.js API路由默认会自动解析所有请求体,包括multipart/form-data类型,你拿到的req.body是已经被解析后的结构化对象,不是后端需要的原始multipart数据流,直接传这个对象后端无法正确识别文件和表单字段。


修复方案

1. 禁用Next.js默认的body解析逻辑

在你的API路由文件中添加如下配置,关闭自动解析,保留原始请求流:

export const config = {
  api: {
    bodyParser: false,
  },
};

2. 修改请求体透传逻辑

直接将原始的req(可读流)作为fetch的body参数,不需要手动序列化JSON、也不需要判断请求类型,流会自动适配不同的请求格式。

3. 保留原始请求头

确保multipart请求的Content-Type头完整透传,不要修改或者覆盖里面的boundary字段,原有透传逻辑无需调整。


修改后完整代码

import { NextApiRequest, NextApiResponse } from "next"
import { getSession } from 'next-auth/client'
import Cookies from 'cookies'
import { apiURL } from 'apps/dashboard/config'

// 新增:禁用默认body解析
export const config = {
  api: {
    bodyParser: false,
  },
};

const theProxy = async (req: NextApiRequest, res: NextApiResponse) => {
    const session = await getSession({ req })

    const { method, query, headers } = req

    const cookies = new Cookies(req, res)
    let {path, ...params} = query
    path = (path as string[]).join("/")
    // 若没有自定义toQueryString,可以替换为:new URLSearchParams(params as Record<string, string>).toString()
    const searchParams = toQueryString(params)

    const options = {
        method,
        // 直接透传原始请求流,非GET/HEAD请求才传body
        body: method != "GET" && method != "HEAD" ? req : undefined,
        headers: {
            'Content-Type': headers['content-type'] || "application/json",
            ...(session ? {'cookie':  session?.user['cookies']} : {}),
            sessionID: cookies.get("sessionID")
        }
    }

    if(headers['content-length']){
        options.headers["Content-Length"] = headers['content-length']
    }

    const response = await fetch(`${apiURL}/${path}?${searchParams}`, options)

    try {
        const respBody = await response.json()
        res.status(response.status).json(respBody)
    } catch (error) {
        res.status(response.status).end(response.statusText)
    }
}

export default theProxy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 09:00:03