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

负载均衡环境下如何通过Laravel实现浏览器大文件上传至S3

可行解决方案汇总

你有三类可落地的方案,可根据研发成本、架构要求选择:

方案1:调整负载均衡策略做会话粘滞

  • 配置负载均衡的*会话粘滞(会话保持)*规则,根据上传请求中携带的文件唯一标识(比如前端计算的文件MD5、分块上传组件默认生成的flowIdentifier参数)做转发规则,把携带同一个文件标识的所有分片请求转发到同一台后端服务器
  • 优势:不需要改动现有前后端上传逻辑,改负载均衡配置即可快速生效
  • 注意点:如果后端服务器缩容扩容、宕机时,正在上传的文件会失败,需要前端做重试处理;如果流量很高,可能会出现负载不均的情况

方案2:改造后端分片存储逻辑,共享分片数据

  • 把原来存在单台服务器本地磁盘的分片,改成存在共享存储(比如Redis、共享NAS、甚至直接存到S3的临时目录),所有后端服务器都可以读取同一个文件的所有分片
  • 当所有分片上传完成后,任意一台后端服务器都可以从共享存储拉取所有分片完成组装,再存到正式的S3路径,最后清理临时分片
  • 优势:不需要依赖会话粘滞,服务扩缩容不影响上传稳定性,兼容现有分块上传的前后端交互逻辑
  • 可选优化:如果用S3存临时分片,可以直接省略本地组装步骤,调用S3的Multipart Upload接口直接合并分片,不需要占用后端服务器的带宽和内存

方案3:改用S3原生分块上传,绕过后端服务器转发

  • 前端直接调用S3的原生分块上传能力,通过STS临时授权凭证上传,分片数据不需要经过你的后端服务器
  • 流程:
    1. 前端先计算文件的唯一标识,请求后端获取S3分块上传的uploadId和分片上传的临时授权地址
    2. 前端直接把每个分片上传到对应的S3临时地址
    3. 所有分片上传完成后,前端通知后端调用S3的合并分片接口完成上传
  • 优势:完全不需要考虑负载均衡的分片分发问题,后端服务器不需要承担上传流量,大文件上传稳定性更高,也不用处理分片组装逻辑
  • 注意点:需要做好STS权限管控,避免越权上传的风险
方案选择建议

如果只是临时解决问题,优先选方案1改负载均衡配置;如果想要长期优化上传稳定性、降低服务器带宽成本,优先选方案3直接对接S3原生能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 07:24:03