[spatie/laravel-medialibrary](https://spatie.be/docs/laravel-medialibrary/ "spatie/laravel-medialibrary")
這個工具很強大,但因為官網的文件寫太爛,得花很多時間自己研究才能符合我自己日常工作的實際情境,以及官網忽略太多其他地方設定的雷區,因此寫這份文件做紀錄,希望幫到未來的自己。
補充:這個工具版本很容易一升版就有 breaking change,其實蠻煩的,請注意自己的版本是否跟我這邊寫的一樣。
安裝 spatie/laravel-medialibrary
要注意不同的 PHP 版本要安裝不同版本的 spatie/laravel-medialibrary
PHP 8.2:v11
PHP 8.1:v10
以下是 PHP 8.1 & v10 的操作方式
composer require "spatie/laravel-medialibrary"
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config"
php artisan migrate
使用 AWS 或是任何 S3 Compatible 的服務
Laravel Media Library 是依賴於 Laravel FileSystem 類別,底層是使用 league/flysystem-aws-s3-v3
composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies
接著在 .env
檔案中設定以下參數
AWS_ACCESS_KEY_ID=<your-key-id>
AWS_SECRET_ACCESS_KEY=<your-secret-access-key>
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=<your-bucket-name>
AWS_USE_PATH_STYLE_ENDPOINT=false
請記得 config/filesystem.php
中,目標的 S3 Disk 須設定 visibility => 'public'
這樣傳上去的圖片才會是公開的。
如何正確設定 AWS S3 Bucket 權限
如果你是使用 S3,請依照以下步驟設定資料夾權限
- 請設定 ACLs enabled 讓程式可以控制存取權限
- 請設定 Block all public access 為 off
- 請設定指定資料夾 Make public using ACL
如何指定 Bucket 底下的不同儲存資料夾?
在 config/filesystems.php
中,可以設定 url
和 root
的參數,這樣就可以指定不同的資料夾