Vercel Serverless Functions 4.4MB限制下大视频上传方案选型咨询
解决Vercel上Next.js Server Actions传视频413 Payload Too Large的方案选择
核心问题复盘
本地通过配置serverActions.bodySizeLimit: '100mb'解决了视频上传的413错误,但部署到Vercel后,受限于Serverless Functions的4.4MB请求体上限,该配置失效。现有两个方案,我们逐一分析并给出最优解:
方案1:直接上传S3+后端后续处理(优化版)
原方案的安全隐患可通过S3预签名URL彻底解决,这也是大文件上传的标准实践:
- 流程调整:
- 前端先向NestJS后端发起请求,携带视频元数据(文件名、大小、类型等)
- 后端验证元数据后,生成S3预签名URL(设置有效期、允许的文件大小/类型、指定存储路径),返回给前端
- 前端直接通过预签名URL将视频上传至S3(无需持有S3密钥)
- 上传完成后,前端通知后端触发压缩逻辑:后端从S3拉取原视频,执行现有压缩代码,将压缩后的视频存回S3,更新业务数据
- 优势:
- 完全绕过Vercel的请求大小限制,无需中转,上传效率更高
- 预签名URL受控,避免未授权上传,解决原方案的安全问题
- 复用现有NestJS压缩逻辑,改动成本低
- 注意点:
- 若视频超过100MB,可结合S3分片上传(AWS SDK支持断点续传),提升大文件上传稳定性
方案2:Next.js API端点流式上传
- 问题分析:
流式转发确实能绕过请求体大小限制,但Vercel Serverless Functions存在执行时间限制(免费版10秒,付费版最长90秒),大视频上传极易触发超时;同时中转流程会增加带宽消耗和延迟,整体效率不如直接传S3 - 适用场景:仅适合小体积视频(<4.4MB),但你的场景是视频上传,显然不是最优选择
最优方案推荐
优先选择优化后的方案1(预签名URL上传),这是兼顾安全性、效率和兼容性的最优解,完全适配Vercel环境和你的技术栈。
内容的提问来源于stack exchange,提问作者abuzain
相关产品推荐
相关产品推荐

