bizly / nova-field-cloudinary
A Laravel Nova 图像字段,带有 Flysystem 适配器,用于存储和检索来自 Cloudinary 的媒体
Requires
- php: >=7.0.0
- carlosocarvalho/flysystem-cloudinary: ^2.0
- davidpiesse/nova-audio: ^0.0.1
- laravel/framework: >=5.0.0
- laravel/nova: ^4.12
Requires (Dev)
- squizlabs/php_codesniffer: >=3.1
This package is auto-updated.
Last update: 2024-09-08 01:37:35 UTC
README
一组带有 Flysystem 适配器的 Laravel Nova 字段,用于存储和检索来自 Cloudinary 的媒体。
此包将使您能够使用 Cloudinary 服务来处理您的 Nova 文件上传。
安装
使用 composer 安装此包
composer require silvanite/nova-field-cloudinary
将 Cloudinary 磁盘添加到文件系统配置中,并设置您的 Cloudinary 账户的环境变量。
// config/filesystem.php return [ ... 'disks' => [ ... 'cloudinary' => [ 'driver' => 'cloudinary', 'api_key' => env('CLOUDINARY_API_KEY'), 'api_secret' => env('CLOUDINARY_API_SECRET'), 'cloud_name' => env('CLOUDINARY_CLOUD_NAME'), ] ] ];
使用 CloudinaryImage 字段
只需在资源的字段中使用 CloudinaryImage 字段代替标准的 Nova Image 字段。此组件扩展了默认的 Image 字段,因此您可以像使用标准字段一样使用它。
use Silvanite\NovaFieldCloudinary\Fields\CloudinaryImage; public function fields(Request $request) { return [ ... CloudinaryImage::make('Profile Photo'), ] }
这本质上与 Image::make()->disk('cloudinary') 相同,但它还会在 Nova UI 中本身提供缩放和优化的预览和缩略图图像。但是,如果您不想这样做,您只需使用标准的 Image 字段即可。
要使用应用程序中的图像,您可以使用 cloudinary_image 辅助函数或使用 Storage 门面读取图像。
// Using the helper (with transformation) return cloudinary_image($this->profile_photo, [ "width" => 200, "height" => 200, "crop" => "fill", "gravity" => "auto", ]) // Using the Storage Facade (without transformation) return Storage::disk('cloudinary')->url($this->profile_photo); // Using the Storage Facade (with transformation) return Storage::disk('cloudinary')->url([ 'public_id' => $this->profile_photo, 'options' => [ "width" => 200, "height" => 200, "crop" => "fill", "gravity" => "auto", ], ])
最大文件大小
Cloudinary 根据您的账户计划对图像施加最大文件大小限制。撰写本文时,免费计划允许图像大小最多为 10MB。
如果成功上传的图像通过 Cloudinary 转换并放大超过此文件大小,则前端将无法下载该图像,并返回 400 错误。
这种情况在处理动画 GIF 图像时尤其可能发生,因为这些图像通常在较小分辨率下是相当大的文件,容易在图像处理器中被放大。
使用 CloudinaryAudio 字段
只需在资源的字段中使用 CloudinaryAudio 字段。此组件扩展了 davidpiesse/nova-audio,而 davidpiesse/nova-audio 又扩展了默认的 Nova 文件字段,因此您可以像使用标准字段一样使用它。
use Silvanite\NovaFieldCloudinary\Fields\CloudinaryAudio; public function fields(Request $request) { return [ ... CloudinaryAudio::make('Audio Source'), ] }
此字段将使用的磁盘设置为 Cloudinary,并确保媒体以正确的文件扩展名存储在数据库字段中。此外,字段将预览 URL 设置为使用 Cloudinary 中的适当路径,以便在 CMS 中播放音频。
要使用应用程序中的音频文件,您可以使用 cloudinary_audio() 辅助函数或使用 Storage 门面读取音频文件。注意,Cloudinary 一起存储图像和视频,因此如果使用 Storage 门面,则应在选项数组中将 resource_type 设置为 video。
// Using the audio helper return cloudinary_audio($this->audio_source); // Using the Storage Facade return Storage::disk('cloudinary')->url([ 'public_id' => $this->audio_source, 'options' => [ "resource_type" => "video", ], ])
使用 CloudinaryVideo 字段
只需在资源的字段中使用 CloudinaryVideo 字段。此组件扩展了默认的 Nova 文件字段,因此您可以像使用标准字段一样使用它。
use Silvanite\NovaFieldCloudinary\Fields\CloudinaryVideo; public function fields(Request $request) { return [ ... CloudinaryVideo::make('Video Source'), ] }
此字段将使用的磁盘设置为 Cloudinary,并确保媒体以正确的文件扩展名存储在数据库字段中。
要使用应用程序中的视频文件,您可以使用 cloudinary_video() 辅助函数或使用 Storage 门面读取视频文件。
// Using the video helper return cloudinary_video($this->video_source); // Using the Storage Facade return Storage::disk('cloudinary')->url([ 'public_id' => $this->audio_source, 'options' => [ "resource_type" => "video", ], ])
使用 CloudinaryFile 字段
只需在资源的字段中使用 CloudinaryFile 字段代替标准的 Nova File 字段。此组件扩展了默认的文件字段,因此您可以像使用标准字段一样使用它。
use Silvanite\NovaFieldCloudinary\Fields\CloudinaryFile; public function fields(Request $request) { return [ ... CloudinaryFile::make('Document'), ] }
此字段将使用的磁盘设置为 Cloudinary,并确保媒体以正确的文件扩展名存储在数据库字段中。