silvanite/nova-field-cloudinary

A Laravel Nova 图像字段,带有 Flysystem 适配器,用于从 Cloudinary 存储和检索媒体

v1.3.2 2020-01-20 17:01 UTC

README

一组 Laravel Nova 字段,使用 Flysystem 适配器从 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 字段。此组件扩展了默认的 File 字段,因此您可以使用与标准字段相同的所有选项。

use Silvanite\NovaFieldCloudinary\Fields\CloudinaryFile;

public function fields(Request $request)
{
    return [
        ...
        CloudinaryFile::make('Document'),
    ]
}

此字段将使用的磁盘设置为 Cloudinary,并确保媒体存储在数据库字段中带有正确的文件扩展名。