Laravel 上傳檔案到Google Cloud Plateform Storage GCS
參考網址 :
https://github.com/Superbalist/laravel-google-cloud-storage
基礎概念
- 如果檔案是要在網頁上直接使用可以將權限直接設為公開
- 透過laravel-google-cloud-storage套件來達成
- 需要在GCP上申請並下載驗證金鑰
安裝laravel-google-cloud-storage
1 |
composer require superbalist/laravel-google-cloud-storage |
如果是Laravel 5.4以下的版本請在app/config.php 中加入以下,否則不需要
1 2 3 4 |
'providers' => [ // ... Superbalist\LaravelGoogleCloudStorage\GoogleCloudStorageServiceProvider::class, ] |
接著在config/filesystems.php中加入以下
1 2 3 4 5 6 7 8 9 |
'gcs' => [ 'driver' => 'gcs', 'project_id' => env('GOOGLE_CLOUD_PROJECT_ID', 'your-project-id'), //GCP上的 project id 'key_file' => env('GOOGLE_CLOUD_KEY_FILE', null), //金鑰json檔絕對路徑 'bucket' => env('GOOGLE_CLOUD_STORAGE_BUCKET', 'your-bucket'), //GCS上要使用的bucket 'path_prefix' => env('GOOGLE_CLOUD_STORAGE_PATH_PREFIX', null), // optional: /default/path/to/apply/in/bucket 目前看起來不需要填寫 'storage_api_uri' => env('GOOGLE_CLOUD_STORAGE_API_URI', null), // see: Public URLs below 目前看起來不需要填寫 'visibility' => 'public', // optional: public|private ], |
2022/04/07 更新:
Laravel 9 以後版本請改用一下package
https://github.com/spatie/laravel-google-cloud-storage
1 |
composer require spatie/laravel-google-cloud-storage |
config/filesystems.php中加入以下
1 2 3 4 5 6 7 8 9 10 11 |
'gcs' => [ 'driver' => 'gcs', 'key_file_path' => env('GOOGLE_CLOUD_KEY_FILE', null), // optional: /path/to/service-account.json 'key_file' => [], // optional: Array of data that substitutes the .json file (see below) 'project_id' => env('GOOGLE_CLOUD_PROJECT_ID', 'your-project-id'), // optional: is included in key file 'bucket' => env('GOOGLE_CLOUD_STORAGE_BUCKET', 'your-bucket'), 'path_prefix' => env('GOOGLE_CLOUD_STORAGE_PATH_PREFIX', ''), // optional: /default/path/to/apply/in/bucket 'apiEndpoint' => env('GOOGLE_CLOUD_STORAGE_API_URI', null), // see: Public URLs below 'visibility' => 'public', // optional: public|private 'metadata' => ['cacheControl'=> 'public,max-age=86400'], // optional: default metadata ], |
其餘設定大同小異
取得GCP存取金鑰
1.API和服務 > 憑證
2.建立憑證 > 服務帳戶金鑰
3.選擇新增服務帳戶
4.填寫自訂義服務名稱,角色選擇為 : 儲存空間 > 儲存空間管理員
5. 點選”建立”後會下載一個JSON檔
6. 將此JSON檔放到專的中的Storage目錄下,並且將絕對路徑填入env中,舉例
1 |
GOOGLE_CLOUD_KEY_FILE=/var/www/project/storage/test-5a1f0d2e5287.json |
7.最後只要將env中的 FILESYSTEM_DRIVE修改為 gcs 就可以使用Storage物件來存取gcs上的檔案了
最後,如何把GCS bucket設定為公開
1.Storager > 瀏覽器
2.在你要設定為公開的bucket右側點選功能鍵 > 編輯bucket權限
3. 權限頁籤選擇”新增成員”
4.新增成員欄位填入allUsers(會自動帶出),角色選擇 :儲存空間 > 儲存空間檢視者
按下儲存後就完成了