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

Next.js 13.4.1使用multipart/form-data上传图片报错求助

Next.js 13.4.1 上传multipart/form-data报错「格式不支持」的解决方法

问题重现

使用Next.js 13.4.1的App Router开发,前端通过FormData提交图片文件到API路由,后端调用request.formData()时触发NotSupportedError: multipart/form-data not supported错误,更新依赖、尝试第三方库后问题仍存在。

原因分析

这个问题是Next.js 13.4.x早期版本(包括13.4.1)的App Router中,底层依赖的undici库对request.formData()解析multipart请求存在兼容性bug,导致无法正确处理表单数据。

可行解决方案

方案1:升级Next.js到13.4.7及以上版本

官方在13.4.7版本中修复了App Router里formData()不支持multipart/form-data的问题,执行升级命令:

npm install next@latest

升级后直接使用原有的request.formData()代码即可正常解析。

方案2:使用formidable库手动解析请求

如果暂时无法升级版本,可借助formidable库绕过Next.js的默认解析逻辑:

  1. 安装依赖:
npm install formidable
  1. 修改API路由代码(app/api/category/route.ts):
import prisma from "@/libs/prisma";
import { NextRequest, NextResponse } from "next/server";
import { IncomingForm } from "formidable";

// 禁用Next.js默认的body解析,让formidable处理
export const config = {
  api: {
    bodyParser: false,
  },
};

export async function POST(request: NextRequest) {
  return new Promise((resolve, reject) => {
    const form = new IncomingForm();
    // 解析请求体
    form.parse(request, async (err, fields, files) => {
      if (err) {
        return resolve(NextResponse.json({ error: err.message }, { status: 500 }));
      }
      // 处理表单字段和文件
      console.log("表单字段:", fields);
      console.log("上传文件:", files);
      // 这里可以添加写入数据库或存储服务的逻辑
      resolve(NextResponse.json({ success: true }, { status: 200 }));
    });
  });
}

方案3:检查中间件是否干扰请求

如果项目中使用了自定义中间件,需确认中间件是否修改了请求的Content-Type头或截断了请求体,导致multipart数据无法被正确解析。可以临时禁用中间件测试,排查是否是中间件的问题。

验证

完成上述任一方案后,重新提交表单,即可正常解析multipart/form-data格式的请求,不再触发「格式不支持」的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:23:10