close

Laravel Medialibrary

Info

Installation

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;實測可以成功
arrow
arrow
    文章標籤
    PHP Laravel
    全站熱搜
    創作者介紹
    創作者 danielhuang030 的頭像
    danielhuang030

    danielhuang030 的研究日誌

    danielhuang030 發表在 痞客邦 留言(0) 人氣()