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

Heroku部署环境大文件上传报413(Payload Too Large)问题求助

解决大文件上传413(Payload Too Large)错误的方案

排查方向1:Cloudflare上传限制

Cloudflare默认上传大小限制为100MB,免费套餐无法突破此限制,需升级至Pro及以上套餐;付费套餐用户可按以下步骤调整:

  • 登录Cloudflare控制台,进入对应域名的管理页面
  • 导航至「规则」→「传输规则」,添加新规则
  • 设置「最大上传大小」为250MB以上(建议300MB),覆盖默认限制

排查方向2:Node.js服务的请求大小限制

即使Heroku路由器默认支持300MB请求,Node.js服务(如Express)的body解析组件可能存在额外限制,需手动调整:

  • 若使用Express内置的body解析:
    app.use(express.json({ limit: '300mb' }));
    app.use(express.urlencoded({ limit: '300mb', extended: true }));
    
  • 若使用multer处理表单数据:
    const multer = require('multer');
    const upload = multer({ limits: { fileSize: 300 * 1024 * 1024 } });
    

排查方向3:优化S3直传流程(核心解决方案)

当前流程可能存在客户端通过Heroku传递文件分片数据的情况,导致触发中间代理的大小限制。建议调整为纯直传S3的分片上传流程:

  • 修改签名接口,仅接收文件元数据(文件名、总大小、分片数量等),不接收任何文件数据
  • 接口返回S3分片上传所需的每个分片的预签名URL及上传参数
  • 客户端直接使用这些预签名URL将每个分片上传至S3,完全绕过Heroku和Cloudflare
  • 所有分片上传完成后,客户端再调用接口通知服务端完成S3分片合并

排查方向4:确认Heroku路由器限制

Heroku路由器默认允许最大300MB的请求大小,若已升级dynos仍报错,需确认是否存在其他代理层(如自定义域名的额外配置)干扰,可直接使用Heroku提供的默认域名测试上传,排除第三方域名配置问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:32:11