close
Laravel Medialibrary
Info
-
Laravel 輔助管理媒體相關檔案的套件,使用簡單,功能豐富
Installation
-
支援 Laravel 5.1 開始到最新版本,關於版本支援請參考 github
-
透過 Composer 安裝
composer require spatie/laravel-medialibrary:^7.0.0
-
db migration,會建立 media table
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"
php artisan migrate
-
產生設定檔
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config"
Setting
-
預設 disk_name 是
public
,這個設定對應config/filesystems.php
;建議另外建立一個設定檔,範例是用media
-
'disks' => [ // ... 'media' => [ 'driver' => 'local', 'root' => public_path('media'), 'url' => env('APP_URL') . '/media', 'visibility' => 'public', ], // ... ],
-
return [ /* * The disk on which to store added files and derived images by default. Choose * one or more of the disks you've configured in config/filesystems.php. */ 'disk_name' => 'media', // ... ];
Usage
-
在需要媒體檔案功能的 eloquent 中實作並使用 Trait
namespace App;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia\HasMedia;
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;
class Test extends Model implements HasMedia
{
use HasMediaTrait;
// ...
}
-
設定媒體檔案,會自動把檔案存到之前設定的路徑中,並儲存檔案相關訊息至 table media
// 取得物件
$item = Test::find(1);
// 設定媒體檔案,可以使用絕對路徑,網址連結或是表單上傳的檔案物件
$item->addMedia($pathToFile)
// 指定分類 test,或不填使用預設
->toMediaCollection('test');
-
取得媒體檔案
$item = Test::find(1);
$media = $item->getMedia();
Converting
-
這個套件包含同作者製作的另一個影像處理套件 spatie/image,詳細文件可以參考這裡;所以可以很容易在處理媒體檔案的同時,做一些簡單的處理(調整大小、模糊化、馬賽克、灰階等)
-
透過 override eloquent registerMediaConversions() 實現
class Test extends Model implements HasMedia
{
// ...
/**
* register media conversions
*
* @param \Spatie\MediaLibrary\Models\Media $media
*/
public function registerMediaConversions(\Spatie\MediaLibrary\Models\Media $media = null)
{
// 建立 200x100 的縮圖
$this->addMediaConversion('thumb')
->width(200)
->height(120)
// 只處理 test collection
->performOnCollections('test')
// 預設會使用 queue 處理,可以利用這個函式直接處理不需透過 job
->nonQueued();
// 建立灰階圖片
$this->addMediaConversion('greyscale')
->greyscale()
->nonQueued();
}
// ...
-
之後如果有新增轉換格式,也可以透過 cmd 讓之前的檔案重新產生,也可以利用參數指定條件
php artisan medialibrary:regenerate
-
還有一個比較特別的地方,可以擷取影片的內容縮圖;但是必須依賴 PHP-FFMpeg/PHP-FFMpeg 套件,系統也必須安裝 FFMpeg;實測可以成功
文章標籤
全站熱搜
留言列表