使用thans/thinkphp-filesystem-cloud扩展配置阿里云OSS最省事稳定,需在filesystem.php中准确配置type为'aliyun'、accessId/accessSecret、bucket、带协议的endpoint及无尾斜杠的url,并推荐流式上传避免临时文件被删问题。

直接用 thans/thinkphp-filesystem-cloud 扩展配置阿里云 OSS,是最省事、最稳定的方式。手写驱动或硬调 SDK 的 uploadFile() 方法容易出错,比如临时文件被删、内存溢出、并发失败等。
安装扩展包
执行命令安装:
composer require thans/thinkphp-filesystem-cloud
配置 filesystem.php
在 config/filesystem.php 的 'disks' 数组里添加阿里云配置项,注意以下字段必须显式填写且准确:
源分发确定性执行服务,采用固定依赖。仅在带有签名审批制品(ClawShield模式)时运行,并产生可验证的输出...
-
type:固定填
'aliyun'(不是 'oss' 或 'aliyuncs') -
accessId 和 accessSecret:RAM 子账号的密钥(建议最小权限策略,至少含
oss:PutObject) - bucket:OSS 控制台中 Bucket 名称,严格区分大小写
-
endpoint:带协议的完整域名,如
'https://oss-cn-hangzhou.aliyuncs.com'(不能只写oss-cn-hangzhou.aliyuncs.com) -
url:对外可访问的域名,用于生成公开 URL,结尾不能加斜杠,例如
'https://my-bucket.oss-cn-hangzhou.aliyuncs.com'
使用示例
上传文件时直接走 ThinkPHP 原生 Filesystem 接口,无需手动处理临时路径:
立即学习“PHP免费学习笔记(深入)”;
Storage::disk('aliyun')->put('avatars/123.jpg', file_get_contents($file->getRealPath()));- 或更推荐流式上传(适合大文件):
Storage::disk('aliyun')->put('avatars/123.jpg', $file->getStream());
这样能绕过 moveTo() 落盘逻辑,避免因 PHP-FPM 清理临时文件导致的「文件不存在」错误。
常见问题提醒
- 如果头像等资源加载不出来,先检查是否用了私有 Bucket + 签名 URL,再确认 CDN 回源 Host、协议、Query String 是否与签名 URL 完全一致
- 不要在
url配置末尾加/,否则拼接 key 时会出现双斜杠,导致 URL 失效 - 本地开发测试时,可临时把
url改成内网 endpoint(如http://my-bucket.oss-cn-hangzhou-internal.aliyuncs.com),节省外网流量


















