optimistdigital/nova-media-field

此包已被弃用,不再维护。未建议替代包。

Laravel Nova 的图片/画廊上传和库浏览字段。


README

将不再提供进一步更新!

Nova Media Field

Latest Version on Packagist Total Downloads

Laravel Nova 包为 Laravel Nova 添加了一个简单的媒体上传字段和媒体浏览器。

要求

  • Imagick
  • Laravel Nova >= 2.10.0

功能

  • 处理任何类型的文件
  • 媒体浏览器
  • 拖放多文件上传
  • 多文件选择
  • 拖放重新排序选定的文件
  • 集合
  • 自定义尺寸的缩略图生成器(也可通过命令重新生成)
  • WebP 生成器(也可通过命令重新生成)
  • nova-translatable 兼容

升级到 v2

查看 CHANGELOG.MD

安装

使用 Composer 在 Laravel Nova 项目中安装此包并运行迁移

# Install package
composer require optimistdigital/nova-media-field

# And then run migrations
php artisan migrate

然后在 NovaServiceProvider 中注册 NovaMediaLibrary 工具

use OptimistDigital\MediaField\NovaMediaLibrary;

public function tools()
{
    return [
        new \OptimistDigital\MediaField\NovaMediaLibrary,
    ];
}

使用方法

use OptimistDigital\MediaField\MediaField;

// ...

fields() {
  return [
    MediaField::make('Profile image', 'profile_image'),

    // Configurable options:
    MediaField::make('Config example', 'config_example')
      ->multiple() // Allows multiple images to to be selected
      ->collection('profile-pictures') // Defines a fixed collection of images instead of a global scope
      ->compact($width, $height = null) // Defines the thumbnail image size shown in Nova (to actually change thumbnail image size, use config)
  ]
}

图片缩略图

图片缩略图定义了上传图片的不同转换。这些转换可以在媒体字段配置文件中的 image_sizes 键下进行配置。

# config/nova-media-field.php

[
    'image_sizes' => [
        'thumbnail' => [
            'width' => 150,
            'height' => 150,
            'crop' => true
        ],
        'medium' => [
            'width' => 300
        ]
    ],
]
  • crop - 默认:false,当为 true 时,如果图片不适合定义的比例,则可能被裁剪。需要定义宽度和高度。
  • width - 调整图片的宽度
  • height - 调整图片的高度

只定义一个尺寸(宽度或高度)可以保持比例。

视频缩略图

媒体字段可以从视频的第一帧生成缩略图。它使用 ffmpegphp-ffmpeg 来实现这一点。

要启用此功能,您必须

  • 安装 ffmpeg
  • 提供 ffmpegffprobe 的路径(在某些环境中)

如果 ffmpegffprobe 路径未自动检测到,请将这些变量添加到您的 ENV 中。

# NB! Including extension (ie .exe on Windows)
FFMPEG_PATH=/usr/local/bin/ffmpeg
FFPROBE_PATH=/usr/local/bin/ffprobe

WebP 支持

默认情况下,在 nova 媒体配置文件中启用了 WebP 支持。在图片上传时,将自动为您生成 WebP。如果您已激活或计划稍后激活它,则可以使用以下命令重新生成缺失的缩略图和 WebP 文件。

重新生成缩略图

要重新生成缩略图(在定义新的缩略图尺寸等之后)运行此命令

php artisan media:regenerate-thumbnails

重新生成 WebP 文件

要重新生成缺失的 WebP 文件,请运行以下命令

php artisan media:regenerate-webp

集合

集合基本上是上传组,可以有自己的上传规则集合。集合配置位于 collection 键下的媒体字段配置文件中。

# config/nova-media-field.php

[
    'collections' => [
        'banners' => [
            'label' => 'Banners',
            'constraints' => [
                'mimetypes' => [
                    'image/svg+xml',
                    'image/svg'
                ]
            ],
            'image_sizes' => [
                'thumbnail'
            ]
        ]
    ],
]

  • label - 显示集合的标签
  • constraints - 验证规则数组(类似于请求验证)
  • image_sizes - 要生成的尺寸(覆盖默认值)

处理重复上传

如果 resolve_duplicates 设置为 true,则将生成原始上传文件的前 1MB 的 md5 哈希值,并用于检查是否发现任何文件重复。如果有,则将提供现有的媒体项目而不是保存新项目。

# config/nova-media-field.php

[
    // When enabled tries to find if file already exists and
    // serve that instead of creating a duplicate entry
    'resolve_duplicates' => true,
]

定制

此软件包允许覆盖核心逻辑以满足项目可能需要的任何自定义需求

# config/nova-media-field.php
[
    // media_handler is core class that handles file uploads, storage and thumbnail generation
    'media_handler' => \OptimistDigital\MediaField\Classes\MediaHandler::class,

    // media_resource is nova resource class for Media
    'media_resource' => \OptimistDigital\MediaField\Media::class,

    // media_model is laravel modal used throughout this package
    'media_model' => \OptimistDigital\MediaField\Models\Media::class,
]

鸣谢

许可

Nova 媒体字段是开源软件,根据 MIT 许可证许可。