這裡記錄如何使用 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;