Laravel Media Conversions不是在Amazon S3上使用laravel-medialibrary创建的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel Media Conversions不是在Amazon S3上使用laravel-medialibrary创建的相关的知识,希望对你有一定的参考价值。

我正在使用Spatie/Laravel-Medialibrary来处理我的产品模型的文件附件。我想将所有产品图片上传到Amazon S3,然后将每个图像自动转换为不同大小(即“拇指”,“小”,“中”,“大”),如documented here

使用本地文件系统时,一切都很好用。该包创建转换,我可以使用我的应用程序访问它们。当我尝试将软件包的设置更改为使用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,就不会创建文件转换。原始文件已成功上传到亚马逊,但转换不存在。有什么建议?

答案

我不知道为什么,但是当添加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();
}
另一答案

由于转换作为“队列”工作,因此您的服务器不会设置队列。

阅读更多Laravel文档https://laravel.com/docs/5.7/queues

以上是关于Laravel Media Conversions不是在Amazon S3上使用laravel-medialibrary创建的的主要内容,如果未能解决你的问题,请参考以下文章

Laravel guzzle post 请求创建功能不起作用(415 Unsupported Media Type`)

Laravel - 加入然后别名两列

Number Conversions

4.11 Type Conversions

Apache Zeppelin 中的 org/bson/conversions/Bson 错误

python 要列出Conversions.py的字符串