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

NextJS 14 Server Action中FormData被1MB截断,bodySizeLimit不生效

解决思路

1. 确认next.config.js配置格式正确

确保bodySizeLimit使用字符串格式的单位后缀(小写),错误的格式会导致配置不生效:

/** @type {import('next').NextConfig} */
const nextConfig = {
  serverActions: {
    bodySizeLimit: '10mb',
  },
};

module.exports = nextConfig;

若写成数字10或大写10MB,NextJS无法识别该配置,会沿用默认的1MB限制。

2. 排查中间件或第三方库的拦截限制

如果项目中使用了自定义中间件(如middleware.ts)或请求处理类库,检查这些代码是否设置了独立的请求体大小限制。部分第三方中间件默认会把请求体限制在1MB,需要手动调整对应参数。

3. 替换Base64传输为直接传File对象

Base64会让文件体积膨胀约33%,大幅提高触发长度限制的概率,直接传输原始文件对象更高效且能规避截断问题:

客户端代码修改:

// 移除Base64转换逻辑,直接将文件加入FormData
data.append("image", imageFile);
const chat = await createChat(data, responseHistory);

Server Action代码修改:

const imageFile = formData.get("image") as File | null;
// 按需处理文件,例如转为Buffer
const fileBuffer = imageFile ? await imageFile.arrayBuffer() : null;

4. 检查部署环境的平台限制

如果部署在Vercel等平台,平台默认的函数请求体限制可能覆盖你的NextJS配置。以Vercel为例,可通过vercel.json调整:

{
  "functions": {
    "app/**/*.{js,ts,jsx,tsx}": {
      "maxRequestBodySize": 10485760 // 10MB,单位为字节
    }
  }
}

若使用Docker、Nginx等部署环境,检查反向代理或容器配置中的请求体限制参数。

5. 确认Server Action的请求方法

在浏览器开发者工具的Network面板查看请求方法,确保是POST请求。若误转为GET请求,URL的长度限制会直接截断数据(NextJS Server Action默认使用POST,但部分自定义逻辑可能导致方法变更)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:36:18