PHP7站点大体积视频上传并转发至bunny.net第三方API解决方案咨询
视频上传至bunny.net最优解决方案
方案1:客户端直传bunny.net(跳过S3,优先推荐)
- 实现逻辑:后端PHP先调用bunny.net接口生成临时上传授权凭证,绝对不要将bunny的固定API密钥暴露到前端;前端拿到凭证后,直接调用bunny的分片上传接口上传文件,支持断点续传,全程不需要经过你的Lightsail服务器。
- 注意事项:提前在bunny.net控制台配置存储库的CORS规则,放行你站点域名的跨域请求;5GB大文件必须用分片上传,避免单请求超时失败。
- 优势:流程最短、传输效率最高、不占用自有服务器资源、无额外存储成本。
方案2:保留现有S3直传流程,新增异步同步任务
- 解决Lambda限制的方法:不要用Lambda处理大文件同步,改为S3新增文件后触发事件通知,将消息推送到SQS队列,你可以直接在现有Lightsail服务器上跑一个后台PHP消费进程,或者用Lightsail容器服务部署一个轻量的同步任务镜像处理队列消息。
- 同步实现:PHP侧用流式传输处理,不需要把整个文件下载到本地磁盘:用
fopen打开S3预签名下载流,直接通过cURL的CURLOPT_READFUNCTION参数将流上传到bunny.net接口,本地几乎无存储和内存占用,支持任意大小的文件传输。 - 优势:完全复用现有成熟的S3上传逻辑,改动量小,稳定性高;如果后续需要对视频做其他处理(如转码、审核),可以直接基于S3文件扩展。
- Lightsail容器服务使用方式:打包一个包含PHP运行环境和同步脚本的Docker镜像,配置容器启动后自动拉取SQS队列消息,处理完单任务后可自动销毁,按实际运行时长付费,不会占用现有LAMP服务的资源。
方案3:大流量场景托管式方案
- 如果你站点的视频上传量级很大,可以直接用AWS S3 Batch Operations功能,配置批量任务规则,自动将新上传的S3文件同步到bunny.net接口,全流程AWS托管,自带错误重试、进度监控能力,不需要自己维护任务调度和消费逻辑。
选型建议
- 单次上传量小、没有额外视频处理需求:优先选方案1,实现成本最低,速度最快。
- 已重度依赖S3、有后续视频处理需求:选方案2,改动量最小,稳定性最高。
- 单天上传量超过百个、运维人力有限:选方案3,托管式服务更省心。
内容的提问来源于stack exchange,提问作者dantbf
相关产品推荐
相关产品推荐

