簡體   English   中英

未在 Amazon S3 上使用 laravel-medialibrary 創建 Laravel 媒體轉換

[英]Laravel Media Conversions not being created with laravel-medialibrary on Amazon S3

我正在使用Spatie/Laravel-Medialibrary來處理我的產品模型的文件附件。 我希望將所有產品圖像上傳到 Amazon S3,然后將每個圖像自動轉換為不同的大小(即“拇指”、“小”、“中”、“大”),如此處所述

使用本地文件系統時,一切都很好。 該包創建了轉換,我可以使用我的應用程序訪問它們。 當我嘗試更改包的設置以使用 Amazon S3 而不是本地文件存儲時,問題就出現了。

所以在我的ImageController.php ,我有以下幾行:

$product->addMedia(public_path() . '/temp/products/'.$product->id)->toCollection('images', 's3');

config/filesystems.php S3 配置

's3' => [
        'driver' => 's3',
        'key' => env('AMAZON_S3_ID'),
        'secret' => env('AMAZON_S3_KEY'),
        'region' => env('AMAZON_S3_REGION'),
        'bucket' => env('AMAZON_S3_BUCKET'),
        'visibility' => 'public'
    ],

以及位於我的Product.php類中的轉換設置:

public function registerMediaConversions()
{
    $this->addMediaConversion('thumb')
         ->setManipulations(['w' => 160, 'h' => 120])
         ->performOnCollections('images');

    $this->addMediaConversion('small')
         ->setManipulations(['w' => 280, 'h' => 210])
         ->performOnCollections('images');

    $this->addMediaConversion('medium')
         ->setManipulations(['w' => 400, 'h' => 300])
         ->performOnCollections('images');

    $this->addMediaConversion('large')
         ->setManipulations(['w' => 640, 'h' => 480])
         ->performOnCollections('images');
}

正如我上面提到的,如果我使用本地文件系統,一切都很好,但是一旦我將其更改為使用 Amazon S3,就不會創建文件轉換。 原始文件已成功上傳到亞馬遜,但沒有轉換。 有什么建議嗎?

由於轉換作為“隊列”工作,您的服務器不會設置隊列。

閱讀更多 Laravel 文檔https://laravel.com/docs/5.7/queues

我不知道為什么,但是當添加 nonQueued() 時。它對我有用。

public function registerMediaConversions()
{
    $this->addMediaConversion('thumb')
         ->setManipulations(['w' => 160, 'h' => 120])
         ->performOnCollections('images')
         ->nonQueued();

    $this->addMediaConversion('small')
         ->setManipulations(['w' => 280, 'h' => 210])
         ->performOnCollections('images')
         ->nonQueued();

    $this->addMediaConversion('medium')
         ->setManipulations(['w' => 400, 'h' => 300])
         ->performOnCollections('images')
         ->nonQueued();

    $this->addMediaConversion('large')
         ->setManipulations(['w' => 640, 'h' => 480])
         ->performOnCollections('images')
         ->nonQueued();
}

可能您還沒有使用php artisan queue:workphp artisan queue:listen啟動隊列工作器。 還要確認您已在.env文件中正確設置了隊列配置(如QUEUE_CONNECTION )。

這是一個老問題,但我發現問題是當您的隊列中有錯誤或您的隊列由於某種原因沒有運行時。 確保您的隊列正常工作可以解決此問題。

添加 noQueued 后。 現在它也對我有用。

<?php
use Illuminate\Database\Eloquent\Model;
use Spatie\Image\Manipulations;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;


class Post extends Model implements HasMedia
{
    use InteractsWithMedia;

    protected $guarded= [];

    // for media library
    const MEDIA_COLLECTION_NAME = 'post_featured_image';
    const MEDIA_CONVERSION_NAME = 'ckthumb';

    public function registerMediaConversions(Media $media = null): void
    {
        $this
            ->addMediaConversion(self::MEDIA_CONVERSION_NAME)
            ->fit(Manipulations::FIT_CROP, 300, 300)
            ->nonQueued();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM