Laravel 有內建 Filesystem 套件,所以可以用來和例如 Amazon S3, Dropbox, Google Cloud Storage 等等服務串接
但找了一下發現和 Google Cloud Storage (GCS) 這方面的資料好像滿零散的
所以整理了一下
正文
GCS 使用的 API 和 S3 是相同的,但是目前只有 v2 有支援,所以需要安裝 v2 的 s3 相關套件,於 composer.json 的 require 加上
{ ... "league/flysystem-aws-s3-v2": "~1.0" … }
然後 composer update 或是 install
再來是建立 GCS 專用的 Laravel Filesystem Provider Service
於 app\Providers 建立 GCSServiceProvider.php
namespace App\Providers; use Illuminate\Support\ServiceProvider; use Storage; use Aws\S3\S3Client; use League\Flysystem\AwsS3v2\AwsS3Adapter; use League\Flysystem\Filesystem; class CloudStorageServiceProvider extends ServiceProvider{ public function boot(){ Storage::extend('gcs', function( $app, $config ) { $client = S3Client::factory([ 'key' => $config['key'], 'secret' => $config['secret'], 'region' => $config['region'], 'base_url' => $config['base_url'], ]); return new Filesystem(new AwsS3Adapter($client, $config['bucket'])); }); } public function register(){ } }
然後在 config/app.php 載入剛剛建立的 Provider
‘providers’ => [ ... App\Providers\GCSServiceProvider::class, ... ]
接下來是在 Laravel 中的 config/filesystem.php 加上 GCS 的設定
(這邊要到 Google Cloud Console 取得 Storage 相關的 API Key )
'gcs' => [ 'driver' => 'gcs', 'key' => 'KEYYYYYYY', 'secret' => 'SEC_KEY', 'region' => 'ASIA-EAST1', 'bucket' => 'BUKET_NAME', 'base_url'=>'https://storage.googleapis.com', ],
接下來就可以使用了,範例:
$disk = Storage::disk('gcs'); // public 為將此檔案公開 $disk->put('123.txt', ‘Good, file content’, ‘public'); // 刪除檔案 $disk->delete('123.txt');