Laravel 配置阿里云 OSS 磁盘时,driver 必须为 'oss',root 是 Bucket 内子路径;endpoint 需匹配地域与网络类型,url 必须显式配置为 OSS 访问域名,否则 url() 返回错误链接。

配置 Laravel 的 filesystems.php 磁盘时,driver 和 root 别写反
阿里云 OSS 不是传统文件系统,Laravel 默认的 local 或 s3 驱动不能直接复用;必须用 oss 驱动(依赖 aliyuncs/oss-sdk-php),且 root 参数实际是 OSS 的 bucket 下的子路径(不是本地目录),容易误填成服务器路径。
实操建议:
- 确认已安装 SDK:
composer require aliyuncs/oss-sdk-php - 在
config/filesystems.php中新增磁盘,driver必须为'oss',不是's3'或'custom' -
root填的是 OSS Bucket 内的前缀路径(如'images/'),留空表示根目录;填错会导致文件上传到意料之外的位置 - 必填项:
access_key_id、access_key_secret、bucket、endpoint(注意选内网 or 公网,跨地域会 403)
Endpoint 选错导致 cURL error 6: Could not resolve host 或 403 Forbidden
OSS 的 endpoint 不是随便填的域名 —— 它和 Bucket 所在地域强绑定,且分公网、内网、VPC 三种类型。ECS 上用公网 endpoint 会绕行、慢;用错地域或协议(http/https)也会失败。
实操建议:
- 查 Bucket 地域:进阿里云 OSS 控制台 → 进 Bucket → 看「概览」页右上角「地域」,例如
oss-cn-hangzhou - 对应 endpoint 示例:
https://oss-cn-hangzhou.aliyuncs.com(公网 HTTPS)、http://oss-cn-hangzhou-internal.aliyuncs.com(同地域 ECS 内网) - 不要手敲 endpoint,从控制台「Bucket 域名」区域直接复制「外网访问域名」或「内网访问域名」
- 如果用
http协议但 Laravel 配置了https强制跳转,可能触发 301 后失败,统一用https更稳妥
上传文件时 put() 返回 false 或抛出 ClientException
常见于权限、路径或 ACL 设置不当。OSS 默认不继承 Bucket 权限,且 put() 的第二个参数(内容)如果是本地路径,Laravel 不会自动读取文件内容 —— 它会把路径字符串当二进制传上去。
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
实操建议:
- 上传文件内容必须是字符串或 resource:
Storage::disk('oss')->put('a.jpg', file_get_contents($path)),而不是put('a.jpg', $path) - 确保 RAM 子账号有
oss:PutObject权限,且 Policy 中Resource匹配你的bucket和prefix - 如果需要公开可读,设置
ACL:在 disk 配置里加'options' => ['acl' => 'public-read'],否则默认私有,url()生成的是临时签名链接 - 注意
url()行为:私有 bucket 下调用它会返回带 Signature 的临时链接(有效期默认 3600 秒),不是永久 URL
Laravel 的 Storage::url() 在 OSS 磁盘下不返回预期域名
这是因为 url() 默认拼接的是 APP_URL + 路径,对 OSS 完全无效。必须显式配置 url 键,指向 OSS 的访问域名(即 Bucket 绑定的自定义域名或 OSS 域名)。
实操建议:
- 在
config/filesystems.php对应磁盘中加:'url' => 'https://your-bucket.oss-cn-hangzhou.aliyuncs.com' - 如果用了 CDN 或自定义域名(如
https://static.example.com),就填那个;别留空,也别指望 Laravel 自动推导 - 该
url只影响url()方法,不影响put()、get()等操作的实际 endpoint - 测试时直接
dd(Storage::disk('oss')->url('test.jpg')),看输出是否为你期望的完整可访问链接
事情说清了就结束。OSS 配置最常卡在 endpoint 和 url 两处,而且错误信息往往不指明根源,得挨个核对控制台里的地域、协议、权限、域名这四样。










