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