我使用Spatie/Laravel-Medialibrary来处理我的产品型号的文件附件。我希望将所有产品图片上传到Amazon S3,然后将每张图片自动转换为不同尺寸(即"拇指","小","中& #34;," large"),documented here。
使用本地文件系统时,一切都很有效。该软件包可以创建转换,并且我可以使用我的应用访问它们。当我尝试将软件包的设置更改为使用Amazon S3而不是本地文件存储时,问题就出现了。
所以在我的ImageController.php
中,我有以下几行:
$product->addMedia(public_path() . '/temp/products/'.$product->id)->toCollection('images', 's3');
config/filesystems.php
'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,就不会创建文件转换。原始文件已成功上传到亚马逊,但转换不存在。有什么建议吗?
答案 0 :(得分:0)
我不知道为什么,但是当添加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();
}
答案 1 :(得分:0)
由于“转换”作为“队列”工作,因此您的服务器未设置队列。
阅读更多Laravel文档https://laravel.com/docs/5.7/queues
答案 2 :(得分:0)
可能您没有使用 php artisan queue:work
或 php artisan queue:listen
启动队列工作器。还要确认您已在 QUEUE_CONNECTION
文件中正确设置了队列配置(如 .env
)。