vis/artur_image_storage_l5

L5的图像存储

3.0.3 2024-08-03 18:02 UTC

README

适用于 Laravel 5.4 的媒体存储包,用于处理图像、视频和文档。

章节

  1. 安装
  2. VIS-CMS
  3. 配置配置
    1. 图像配置
    2. 文档配置
    3. 视频配置
  4. 规范和示例
    1. 通用规范
    2. 使用图像
    3. 使用相册
    4. 使用文档
    5. 使用视频
    6. 使用视频相册
    7. 使用标签
  5. 缓存
  6. 在 VIS CMS 中的管理特点
    1. 通用管理
    2. 通用图像、视频和文档管理
      1. 图像管理
      2. 视频管理
      3. 文档管理
    3. 通用相册和视频相册管理

安装

执行

    composer require "vis/image_storage_l5":"1.*"

将以下内容添加到 config/app.php 的 providers 数组中

    Vis\ImageStorage\ImageStorageServiceProvider::class,

执行表迁移

   php artisan migrate --path=vendor/vis/image_storage_l5/src/Migrations

发布 config、js、css、images

    php artisan vendor:publish --provider="Vis\ImageStorage\ImageStorageServiceProvider" --force

VIS-CMS

在 config/builder/admin.php 文件中的 menu 数组中添加设置

    array(
      'title' => 'Медиахранилище',
      'icon'  => 'picture-o',
      'check' => function() {
          return Sentinel::hasAccess('admin.image_storage.view');
      },
      'submenu' => array(
          array(
              'title' => "Изображения",
              'link'  => '/image_storage/images',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Галереи",
              'link'  => '/image_storage/galleries',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Видео",
              'link'  => '/image_storage/videos',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Видеогалереи",
              'link'  => '/image_storage/video_galleries',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Документы",
              'link'  => '/image_storage/documents',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
          array(
              'title' => "Теги",
              'link'  => '/image_storage/tags',
              'check' => function() {
                  return Sentinel::hasAccess('admin.image_storage.view');
              }
          ),
      )
    ),

在 config/builder/tb-definitions/groups.php 中添加权限并添加到组中

    'Медиахранилище' => array(
        'admin.image_storage.view'   => 'Просмотр',
        'admin.image_storage.create' => 'Создание',
        'admin.image_storage.update' => 'Редактирование',
        'admin.image_storage.delete' => 'Удаление',
    ),

配置配置

所有配置包含 3 个主要设置

title 设置,指示在 VIS-CMS 中显示的分区名称

    'title' => "Галереи",

per_page 设置,指示在 VIS-CMS 中每页显示的记录数

    'per_page' => 20,

fields 设置,包含将在编辑表单中输出的字段集
值:text、textarea、checkbox、select、datetime。定义方式与 VIS-CMS 相同。
支持动态创建新的字段和标签页

    'fields' => array(
        ...
    ),

图像配置

上传图像的验证设置。错误中自动插入 'max_size' 和 'extension_list' 的值

    'size_validation' => array(
        'enabled' => true,
        'max_size' => '1500000',
        'error_message' => "Превышен максимальный размер изображения в [size] MB"
    ),
    'extension_validation' => array(
        'enabled' => true,
        'allowed_extensions' => array('png', 'jpg', 'jpeg'),
        'error_message' => "Допустимы только изображения форматов: [extension_list]"
    ),

上传 JPG 图像的质量设置。值:0-100

    'quality' => 85,

使用 Vis.Builder\OptimizationImg 类优化上传图像的设置。
值:true/false

    'optimization' => true,

使用图像的原始名称作为 title 字段的设置。
值:true/false

    'source_title' => true,

设置在数据库中存储图像元数据。
使用 exif_read_data 函数,数据以 json 格式存储。
值:true/false

    'store_exif' => true,

设置在删除图像实体时删除图像文件。
值:true/false

    'delete_files' => true,

设置在重命名图像实体时重命名图像文件。
值:true/false

    'rename_files' => true,

设置显示生成新尺寸按钮。
在需要为现有记录生成新尺寸时使用。
值:true/false

    'display_generate_new_size_button' => true,

设置生成的图像尺寸。
允许在上传图像时自动生成其他尺寸的图像。
使用图像处理包 Intervention
可以使用 Modify 设置修改图像,它接受 Intervention 参数

    'sizes' => array(
        'source' => array(
            'caption' => 'Оригинал',
            'default_tab' => true,
        ),
        'cms_preview' => array(
            'caption' => 'Превью в ЦМС',
            'default_tab' => false,
            'modify' => array(
                'fit' => array(160, 160, function (\Intervention\Image\Constraint $constraint) {
                    $constraint->upsize();
                }),
            ),
        ),

文档配置

所有设置参数与图像类似,除了
允许在一个“文档”实体下存储多个文件的设置。
当需要在不同语言网站上显示不同文件时可以使用。
在上传文档时,为所有尺寸设置链接到原始文件,然后可以替换。

    'sizes' => array(
        'source' => array(
            'caption' => 'Основной файл',
            'default_tab' => true,
        ),
        'ua' => array(
            'caption' => 'Файл на укр',
            'default_tab' => false,
        ),
        'en' => array(
            'caption' => 'Файл на англ',
            'default_tab' => false,
        ),

    ),

视频配置

在设置 fields 数组中,有两个必填字段,分别负责服务和视频标识符。

    'api_provider' => array(
        'caption' => 'Видео сервис',
        'type' => 'select',
        'options' => config('image-storage.video_api.provider_names')
    ),
    'api_id' => array(
        'caption' => 'Идентификатор видео',
        'type' => 'text',
        'field' => 'string',
        'placeholder' => 'Идентификатор видео',
    ),

视频 API 配置

设置控制向需要密钥的视频 API 发送请求
值:true/false

    'enabled' => true,

设置视频 API 响应的缓存时间
值:x、0(注意:0 - 永久)、false

    'cache_minutes' => 60,

设置自动填充 title 和 description 字段,来自视频 API 的响应
值:true/false

    'set_data' => true,

设置提供视频 API 的供应商名称。
在创建或编辑视频时显示在 select 中

    'provider_names' => array(
        'youtube' => 'Youtube',
        'vimeo'   => 'Vimeo',
    ),

设置提供视频 API 的供应商

    'providers' => array(
        'youtube' => array(
         ...
        ),
        'vimeo' => array(
        ...
        ),
     )

每个视频API提供商的设置

设置在服务上检查视频存在(不需要API密钥)

    'video_existence_url' => '',

设置在服务上图像预览的链接(不需要API密钥)

    'preview_url' => '',

设置在服务上图像预览的质量

    'preview_quality' => '',

设置在服务上查看视频的链接(不需要API密钥)

    'watch_url' => '',

设置在服务上嵌入视频的链接(不需要API密钥)

    'embed_url' => '',

设置服务API的链接

    'api_url' => '',

设置将从服务API请求的数据

    'api_part' => '',

设置连接到服务API的密钥

    'api_key' => '',

规范和示例

通用规范

要连接所需服务,需要在类开始处定义其调用。

    use Vis\ImageStorage\Gallery;
    use Vis\ImageStorage\Image;
    use Vis\ImageStorage\Tag;
    use Vis\ImageStorage\VideoGallery;
    use Vis\ImageStorage\Video;
    use Vis\ImageStorage\Documents;

所有模型都可以应用标准请求编写原则,因为它们继承自Eloquent模型。
所有模型还使用VIS CMS \Vis\Builder\Helpers\Traits\TranslateTrait和\Vis\Builder\Helpers\Traits\SeoTrait特性

为所有记录生成唯一的slug,其值可以通过以下方法获取

    public function getSlug()

所有模型的通用scope过滤器(\Models\Traits\FilterableTrait.php)
按id排序的过滤器

    public function scopeOrderId(Builder $query, $order = "desc")

仅输出活动的记录的过滤器

    public function scopeActive(Builder $query)

根据活动数组输出记录的过滤器
值:数组 $activity[0,1]

   public function scopeFilterByActivity(Builder $query, array $activity = [])

按slug输出记录的过滤器

    public function scopeSlug(Builder $query, $slug = '')

按标题输出记录的过滤器

    public function scopeFilterByTitle(Builder $query, $title = '')

按创建日期输出记录的过滤器。
值:数组 $date['from' => '', to => '']

    public function scopeFilterByDate(Builder $query, array $date = [])

按相关标签输出记录的过滤器。
值:数组 $tags[$idTags]

    public function scopeFilterByTags(Builder $query, array $tags = [])

Eloquent与标签的关系。获取与实体相关联的所有标签

    public function tags()

使用图像

Eloquent与相册的关系。获取与图像相关联的所有相册

    public function galleries()

按相册过滤图像。
值:数组 $galleries[$idGalleries]

    public function scopeFilterByGalleries(Builder $query, array $galleries = [])

按名称路由获取图像链接的方法。路由需要自行定义

    public function getUrl()
    {
        return route("vis_images_show_single", [$this->getSlug()]);
    }

继承自src/Models/AbstractImageStorageFile.php的抽象的以下方法
获取指定大小的图像路径
值:配置中指定的尺寸之一,默认为source

    public function getSource($size = 'source')

获取图像文件的分辨率
值:配置中指定的尺寸之一,默认为source

    public function getFileExtension($size = 'source')

获取图像文件的名称
值:配置中指定的尺寸之一,默认为source

    public function getFileName($size = 'source')

获取图像文件的大小
值:配置中指定的尺寸之一,默认为source

    public function getFileSize($size = 'source')

获取图像文件的mime-type
值:配置中指定的尺寸之一,默认为source

    public function getFileMimeType($size = 'source')

使用相册

Eloquent与图像的关系。获取与相册相关联的所有图像

    public function images()

按图像存在过滤相册

    public function scopeHasImages(Builder $query)

按活动图像过滤相册

    public function scopeHasActiveImages(Builder $query)

按名称路由获取相册链接的方法。路由需要自行定义

    public function getUrl()
    {
        return route("vis_galleries_show_single", [$this->getSlug()]);
    }

获取相册预览图像的方法
值:配置中指定的图像尺寸之一,默认为cms_preview

    public function getGalleryPreviewImage($size = 'cms_preview')

使用文档

继承自src/Models/AbstractImageStorageFile.php的抽象的以下方法
获取指定大小的文档路径
值:配置中指定的尺寸之一,默认为source

    public function getSource($size = 'source')

获取文档文件的分辨率
值:配置中指定的尺寸之一,默认为source

    public function getFileExtension($size = 'source')

获取文档文件的名称
值:配置中指定的尺寸之一,默认为source

    public function getFileName($size = 'source')

获取文档文件的大小
值:配置中指定的尺寸之一,默认为source

    public function getFileSize($size = 'source')

获取文档文件的mime-type
值:配置中指定的尺寸之一,默认为source

    public function getFileMimeType($size = 'source')

使用视频

Eloquent与图像预览的关系。获取已安装的图像预览对象

    public function preview()

Eloquent与图像的关系。获取与相册相关联的所有图像

    public function videoGalleries()

与API提供商的关系。根据视频类型获取API provider对象

    public function api()

按相册过滤视频。
值:数组 $galleries[$idGalleries]

    public function scopeFilterByVideoGalleries(Builder $query, array $galleries = [])

获取视频id的方法

    public function getSource()

获取视频链接的方法。路由需要自行定义

    public function getUrl()
    {
        return route("vis_videos_show_single", [$this->getSlug()]);
    }

获取视频预览图像链接的方法
获取或安装的图像预览或从API请求图像。

    public function getPreviewImage($size = 'source')

使用视频 API

视频API实现了/Models/Interfaces/VideoAPIInterface.php接口并具有以下方法

获取视频链接的方法

    public function getWatchUrl(array $urlParams);

获取嵌入视频链接的方法

    public function getEmbedUrl(array $urlParams);

从API获取图像预览链接的方法

    public function getPreviewUrl();

从API获取所有视频数据的方法

    public function getApiResponse();

从API获取视频标题的方法

    public function getTitle();

从API获取视频描述的方法

    public function getDescription();

从API获取视频观看次数的方法

    public function getViewCount();

从API获取视频点赞次数的方法

    public function getLikeCount();

从API获取视频踩次数的方法

    public function getDislikeCount();

从API获取视频收藏次数的方法

    public function getFavoriteCount();

从API获取视频评论次数的方法

    public function getCommentCount();

使用视频相册

Eloquent与视频的关系。获取与视频相册相关联的所有视频

    public function videos()

按图像存在过滤视频相册

    public function scopeHasVideos(Builder $query)

按活动视频过滤视频相册

    public function scopeHasActiveVideos(Builder $query)

按名称路由获取视频相册链接的方法。路由需要自行定义

    public function getUrl()
    {
        return route("vis_video_galleries_show_single", [$this->getSlug()]);
    }

使用标签

Eloquent与图像的关系。获取与标签相关联的所有图像

    public function images()

与文档的Eloquent关系。获取所有带有标签的相关图像

    public function documents()

与视频的Eloquent关系。获取所有带有标签的相关图像

    public function videos()

与相册的Eloquent关系。获取所有带有标签的相关图像

    public function galleries()

与视频相册的Eloquent关系。获取所有带有标签的相关图像

    public function videoGalleries()

缓存

媒体库使用一系列标签进行缓存工作。
当媒体库的记录被修改时,会自动刷新与这些标签相关联的现有缓存。
每个实体的标签列表

  • image-storage.video
  • image-storage.document
  • image-storage.video_gallery
  • image-storage.gallery
  • image-storage.image
  • image-storage.tag

在 VIS CMS 中的管理特点

通用管理

界面与VIS-CMS界面尽可能接近。
每个部分的页眉中都有一个包含过滤器(部分有独特的过滤器)和创建新记录按钮的工具栏,该按钮将调用创建模态窗口。
页面底部有分页功能

通用图像、视频和文档管理

点击已添加的对象将调用记录编辑模态窗口
它包含大小和字段选项卡,这些选项卡在相应配置中指定。可以直接管理特定图像的关系。

选择对象区域时,将显示对象多选管理面板。
选择区域后,可以通过在按住ctrl键的同时使用鼠标点击来精确地添加或删除对象。

图像管理

点击“上传图像”字段时,将弹出选择要上传的图像的窗口。支持图像的多重上传。
在所有图像上传并创建它们的额外尺寸后,将发送请求以优化它们。
如果任何生成的图像尺寸未过时,则可以在该尺寸选项卡中替换它。

视频管理

创建新视频时,只需指定视频服务和视频标识符。如果视频存在,它将被添加到总列表中。
如果配置中设置了相应的设置,则标题和描述字段将自动填充。
如果视频服务提供的预览图像未过时,则可以在“预览”选项卡中上传自己的图像。

文档管理

点击“上传文档”字段时,将弹出选择要上传的文档的窗口。支持文档的多重上传。
在所有文档上传到所有附加字段后,将设置指向原始文件的链接。
如果需要替换某个尺寸的文件,则可以在该尺寸选项卡中替换它。

通用相册和视频相册管理

创建相册并添加图像或视频到其中后,可以通过在按住ctrl键的同时使用鼠标拖动来管理图像或视频的顺序。
可以通过在按住ctrl键的同时使用鼠标点击来将图像或视频设置为相册的预览。