這裡記錄如何使用 Laravel 的 storage 上傳檔案到 ali-oss
這裡所使用的 Laravel 版本:5.7.12
安裝擴充
"composer require jacobcyl/ali-oss-storage:^2.1"
設定 config
config/app.php 將下面這行加入 providers
Jacobcyl\AliOSS\AliOssServiceProvider::class,
設定 .env
FILESYSTEM_DRIVER = oss
FILESYSTEM_CLOUD_PATH = # <cloud filesystem http path>
OSS_ACCESS_KEY_ID = # <Your Aliyun OSS AccessKeyId>
OSS_ACCESS_KEY_SECRET = # <Your Aliyun OSS AccessKeySecret>
OSS_ENDPOINT = # OSS 外网节点或自定义外部域名 <the endpoint of OSS, E.g: oss-cn-hangzhou.aliyuncs.com | custom domain, E.g:img.abc.com>
OSS_BUCKET = # <OSS bucket name>
設定 filesystem.php
config/filesystems.php
'disks'=>[
...
'oss' => [
'driver' => 'oss',
'access_id' => env('OSS_ACCESS_KEY_ID'),
'access_key' => env('OSS_ACCESS_KEY_SECRET'),
'bucket' => env('OSS_BUCKET'),
'endpoint' => env('OSS_ENDPOINT'),
//'endpoint_internal' => '<internal endpoint [OSS内网节点] 如:oss-cn-shenzhen-internal.aliyuncs.com>', // v2.0.4 新增配置属性,如果为空,则默认使用 endpoint 配置(由于内网上传有点小问题未解决,请大家暂时不要使用内网节点上传,正在与阿里技术沟通中)
'cdnDomain' => '無設定可指定false,有設定則輸入 <CDN domain, cdn域名>', // 如果isCName为true, getUrl会判断cdnDomain是否设定来决定返回的url,如果cdnDomain未设置,则使用endpoint来生成url,否则使用cdn
'ssl' => <true|false> // true to use 'https://' and false to use 'http://'. default is false,
'isCName' => <true|false> // 是否使用自定义域名,true: 则Storage.url()会使用自定义的cdn或域名生成文件url, false: 则使用外部节点生成url
'debug' => <true|false>
],
...
]
並且將預設的上傳改為 oss
'default' => 'oss',
使用方式
在 Controller 引用 Storgae
use Illuminate\Support\Facades\Storage;
簡易上傳示範
$folder = 'cms'; //雲端上傳空間資料夾名稱
$path = $request->file('avatar')->store($folder);//取得檔案相對路徑
$results = Storage::url($path);//取回檔案路徑
return $results;