modera/file-repository-bundle

v3.1.0 2021-09-05 12:51 UTC

README

此包提供了一组高级API,用于将文件放入虚拟文件存储库,这些存储库内部使用Gaufrette文件系统抽象层。

安装

步骤1:下载包

composer require modera/file-repository-bundle:4.x-dev

此命令要求您全局安装Composer,如Composer文档中的安装章节中所述。

步骤2:启用包

此包应由Flex自动启用。如果您不使用Flex,您需要手动通过在项目的config/bundles.php文件中添加以下行来启用包:

<?php
// config/bundles.php

return [
    // ...
    Knp\Bundle\GaufretteBundle\KnpGaufretteBundle::class => ['all' => true], // if you still don't have it
    Modera\FileRepositoryBundle\ModeraFileRepositoryBundle::class => ['all' => true],
];

最后,检查您的config/packages/validator.yaml,并确保验证服务已启用。

framework:
    validation: ~

文档

当您需要以一致的方式存储文件,并能够在以后在领域模型或使用Doctrine ORM查询这些文件时,此包非常有用。配置过程包括两个步骤

  • 配置Gaufrette文件系统适配器
  • 创建虚拟存储库

以下是一个使用Gaufrette的示例文件系统配置,该配置将使用本地/path/to/my/filesystem路径来存储文件

# config/packages/knp_gaufrette.yaml
knp_gaufrette:
    adapters:
        local_fs:
            local:
                directory: /path/to/my/filesystem
    filesystems:
        local_fs:
            adapter: local_fs

一旦配置了低级文件系统,您就可以创建一个管理文件的存储库

<?php

/* @var \Modera\FileRepositoryBundle\Repository\FileRepository $fr */
$fr = $container->get('modera_file_repository.repository.file_repository');

$repositoryConfig = array(
    'filesystem' => 'local_fs'
);

$fr->createRepository('my_repository', $repositoryConfig, 'My dummy repository');

$dummyFile = new \SplFileInfo('dummy-file.txt');

/* @var \Modera\FileRepositoryBundle\Entity\StoredFile $storedFile */
$storedFile = $fr->put('my_repository', $dummyFile);

当将物理文件放入存储库时,将在数据库中创建其描述符记录,以后您可以在领域逻辑中使用它。例如,如果您有一个表示物理文件的Doctrine实体,并且您想将一个用户与该用户的个人资料图片相关联,这将很有用。还值得一提的是,一旦删除了StoredFile实体,配置的文件系统中存储的物理文件也将自动删除。数据库中保存的此描述性记录包含许多有用的信息,如MIME类型、文件扩展名等,请参阅StoredFile实体的字段以获取更多详细信息。

存储库配置

当您创建存储库时,您可以使用以下配置属性来调整存储库的行为

  • filesystem -- 此存储库应使用的Gaufrette文件系统名称来存储文件
  • storage_key_generator -- 实现了Modera\FileRepositoryBundle\Repository\StorageKeyGeneratorInterface接口的类的DI服务ID。此类用于生成文件系统存储文件时使用的文件名。如果创建存储库时未提供此配置属性,则将使用Modera\FileRepositoryBundle\Repository\UniqidKeyGenerator类。
  • images_only -- 如果设置为TRUE,则只能将图像上传到存储库。
  • max_size -- 如果指定了它,则无法上传大小超过给定值的文件。对于兆字节使用“m”前缀,对于千字节使用“k”,如果没有前缀,则使用字节,例如:100k,5m,800。
  • file_constraint -- File约束的配置选项。
  • image_constraint -- Image约束的配置选项。
  • 拦截器 -- 允许指定要使用的附加拦截器,值必须是服务容器ID

命令行

该捆绑包提供命令,允许您在存储库和文件上执行一些标准操作

  • modera:file-repository:create
  • modera:file-repository:list
  • modera:file-repository:delete-repository
  • modera:file-repository:put-file
  • modera:file-repository:list-files
  • modera:file-repository:download-file
  • modera:file-repository:delete-file
  • modera:file-repository:generate-thumbnails

缩略图生成

该捆绑包包含一个拦截器,您可以使用它来自动为存储在存储库中的图像生成缩略图,要启用此功能,在创建新存储库时需要使用 modera_file_repository.interceptors.thumbnails_generator.interceptor 拦截器

<?php

/* @var \Modera\FileRepositoryBundle\Repository\FileRepository $fr */
$fr = $container->get('modera_file_repository.repository.file_repository');

$repositoryConfig = array(
    'filesystem' => 'local_fs',
    'interceptors' => [
        \Modera\FileRepositoryBundle\ThumbnailsGenerator\Interceptor::ID,
    ],
    'thumbnail_sizes' => array(
        array(
            'width' => 300,
            'height' => 150
        ),
        array(
            'width' => 32,
            'height' => 32
        )
    )
);

$fr->createRepository('vacation_pictures', $repositoryConfig, 'Pictures from vacation');

配置键 "thumbnail_sizes" 可用于指定所需的缩略图大小。使用此配置时,每当图片上传到存储库时,都会创建替代图片,有关更多详细信息,请参阅 StoredFile::$alternatives, StoredFile::$alternativeOf 属性。如果您已经有一个存储库并希望为其生成缩略图,则使用 modera:file-repository:generate-thumbnails 命令。

许可

此捆绑包受MIT许可协议保护。有关完整许可信息,请参阅捆绑包中的 Resources/meta/LICENSE 文件。