【发布时间】:2020-03-17 12:56:41
【问题描述】:
有人在 Cloudinary 中使用 Laravel 软件包 spatie/media-library 吗?
我认为使用 flysystem 实现它是微不足道的。
我实际上将 Cloudinary 用作带有 silvanite/nova-field-cloudinary 的 Nova 字段,效果很好,但我需要 media-libaray,它不支持开箱即用。
所以,我做了什么:
- 添加云盘:
'cloudinary' => [
'driver' => 'cloudinary',
'api_key' => env('CLOUDINARY_API_KEY'),
'api_secret' => env('CLOUDINARY_API_SECRET'),
'cloud_name' => env('CLOUDINARY_CLOUD_NAME'),
'url' => env('CLOUDINARY_URL'),
],
-
将磁盘名称更改为 cloudinary
'disk_name' => 'cloudinary', -
尝试添加图片
$newMedia = $myModel ->addMediaFromUrl($imageUrl) ->setFileName($filename) ->toMediaCollection();
然后我收到“找不到文件”错误。图片已上传,但记录未保存到数据库。
#message: "File not found at path: 711297/my-image.jpg"
#code: 0
#file: "./vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php"
#line: 435
-previous: League\Flysystem\FileNotFoundException^ {#2389
#path: "711297/my-image.jpg"
#message: "File not found at path: 711297/my-image.jpg"
#code: 0
#file: "./vendor/league/flysystem/src/Filesystem.php"
#line: 389
trace: {
./vendor/league/flysystem/src/Filesystem.php:389 { …}
./vendor/league/flysystem/src/Filesystem.php:194 { …}
./vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php:433 { …}
./vendor/spatie/laravel-medialibrary/src/Filesystem/Filesystem.php:81 { …}
./vendor/spatie/laravel-medialibrary/src/Filesystem/Filesystem.php:88 { …}
./vendor/spatie/laravel-medialibrary/src/FileManipulator.php:77 { …}
./vendor/spatie/laravel-medialibrary/src/FileManipulator.php:44 { …}
./vendor/spatie/laravel-medialibrary/src/Filesystem/Filesystem.php:33 { …}
./vendor/spatie/laravel-medialibrary/src/FileAdder/FileAdder.php:310 { …}
./vendor/spatie/laravel-medialibrary/src/FileAdder/FileAdder.php:301 { …}
./vendor/spatie/laravel-medialibrary/src/FileAdder/FileAdder.php:251 { …}
./vendor/efdi/carmarket-module/src/Jobs/ImportImages.php:145 { …}
./vendor/efdi/carmarket-module/src/Jobs/ImportImages.php:84 { …}
./vendor/efdi/carmarket-module/src/Jobs/ImportImages.php:43 { …}
所以问题似乎是它试图使用本地路径加载图像,这当然不存在。
我尝试使用自定义 PathGenerator,因此它返回的 url 没有解决方案,因为它需要一个路径。
我不知道他们如何为 S3 做到这一点。
因此,如果有人知道如何解决此问题或有可行的解决方案,我将不胜感激。
【问题讨论】:
-
@MartijnImhoff 我也发现它适用于手动使用磁盘,但不适用于 Spatie 的媒体库包。
标签: php laravel cloudinary laravel-medialibrary