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(會自動帶出),角色選擇 :儲存空間 > 儲存空間檢視者
按下儲存後就完成了

