luongnd/laravel-medialibrary-mongodb

将文件与 Eloquent 模型关联


README

Latest Version Software License Build Status SensioLabsInsight Quality Score Total Downloads

这个 Laravel >=5.1 和 Lumen 兼容的包可以将各种文件与 Eloquent 模型关联起来。它提供了一个简单的 API 来使用。以下是一个示例

$newsItem = News::find(1);
$newsItem->addMedia($pathToFile)->toCollection('images');

它可以直接处理你的上传

$newsItem->addMedia($request->file('image'))->toCollection('images');

想要将一些大文件存储在另一个文件系统中?没问题

$newsItem->addMedia($smallFile)->toCollectionOnDisk('downloads', 'local');
$newsItem->addMedia($bigFile)->toCollectionOnDisk('downloads', 's3');

文件的存储由 Laravel 的文件系统 处理,所以你可以使用你喜欢的任何文件系统。此外,该包可以对已添加到媒体库中的图像和 PDF 进行图像处理。

Spatie 是一家位于比利时的安特卫普的网页设计公司。你可以在我们的网站上找到我们所有开源项目的概述 在这里

文档

你可以在 https://docs.spatie.be/laravel-medialibrary/v4 上找到文档。

在使用这个包时遇到困难?发现了一个错误?你有关于改进媒体库的一般性问题或建议吗?请随意在 GitHub 上创建问题,我们将尽快解决。

如果你发现了一个关于安全的错误,请通过 freek@spatie.be 发送邮件,而不是使用问题跟踪器。

要求

为了创建派生图像,你的服务器上应该安装了 GD。对于创建 svg 或 pdf 的缩略图,你还应该安装 Imagick

安装

你可以使用以下命令通过 composer 安装此包

composer require spatie/laravel-medialibrary

接下来,你必须安装服务提供者

// config/app.php
'providers' => [
    ...
    Spatie\MediaLibrary\MediaLibraryServiceProvider::class,
];

你可以使用以下命令发布迁移

php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"

在迁移发布后,你可以通过运行迁移来创建 media-table

php artisan migrate

你可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config"

这是发布配置文件的内容

return [

    /*
     * The filesystems on which to store added files and derived images by default. Choose
     * one or more of the filesystems you configured in app/config/filesystems.php
     */
    'defaultFilesystem' => 'media',

    /*
     * The maximum file size of an item in bytes. Adding a file
     * that is larger will result in an exception.
     */
    'max_file_size' => 1024 * 1024 * 10,

    /*
     * This queue will used to generate derived images.
     * Leave empty to use the default queue.
     */
    'queue_name' => '',

    /*
     * The class name of the media model to be used.
     */
    'media_model' => Spatie\MediaLibrary\Media::class,

    /*
     * When urls to files get generated this class will be called. Leave empty
     * if your files are stored locally above the site root or on s3.
     */
    'custom_url_generator_class' => null,

    /*
     * The class that contains the strategy for determining a media file's path.
     */
    'custom_path_generator_class' => null,

    's3' => [
        /*
         * The domain that should be prepended when generating urls.
         */
        'domain' => 'https://xxxxxxx.s3.amazonaws.com',
    ],

    'remote' => [
        /**
         * Any extra headers that should be included when uploading media to
         * a remote disk. Even though supported headers may vary between
         * different drivers, a sensible default has been provided.
         *
         * Supported by S3: CacheControl, Expires, StorageClass,
         * ServerSideEncryption, Metadata, ACL, ContentEncoding
         */
        'extra_headers' => [
            'CacheControl' => 'max-age=604800',
        ]
    ]
];

最后,你应该在 app/config/filesystems.php 中添加一个磁盘。这是一个典型的配置

    ...
	'disks' => [
        'media' => [
            'driver' => 'local',
            'root'   => public_path().'/media',
        ],
    ...    

媒体库的所有文件都将存储在这个磁盘上。如果你计划使用图像处理,你应该在你的服务中配置一个队列,其名称与配置文件中指定的名称相同。

Lumen 支持

Lumen 配置稍微复杂一些,但功能和 API 与 Laravel 相同。

使用此命令安装

composer require spatie/laravel-medialibrary

在引导文件中取消以下行的注释

// bootstrap/app.php:
$app->withFacades();
$app->withEloquent();

配置 laravel-medialibrary 服务提供者(如果尚未启用,则包括 AppServiceProvider

// bootstrap/app.php:
$app->register(App\Providers\AppServiceProvider::class);
$app->register(Spatie\MediaLibrary\MediaLibraryServiceProvider::class);

更新 AppServiceProvider 的 register 方法以将文件系统管理器绑定到 IOC 容器

// app/Providers/AppServiceProvider.php
public function register()
{
    $this->app->singleton('filesystem', function ($app) {
        return $app->loadComponent('filesystems', 'Illuminate\Filesystem\FilesystemServiceProvider', 'filesystem');
    });

    $this->app->bind('Illuminate\Contracts\Filesystem\Factory', function($app) {
        return new \Illuminate\Filesystem\FilesystemManager($app);
    });
}

手动将包配置文件复制到 app/config/laravel-medialibrary.php(如果尚未存在,可能需要创建配置目录)。

Laravel 文件系统配置文件 复制到 app/config/filesystem.php。你应该在文件系统配置中添加一个磁盘配置,以匹配 laravel-medialibrary 配置文件中指定的 defaultFilesystem

最后,更新 boostrap/app.php 以加载两个配置文件

// bootstrap/app.php
$app->configure('laravel-medialibrary');
$app->configure('filesystems');

测试

您可以使用以下命令运行测试:

vendor/bin/phpunit

## 升级

有关详细信息,请参阅 UPGRADING

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

如果您发现任何安全相关的问题,请发送电子邮件至 freek@spatie.be,而不是使用问题跟踪器。

鸣谢

替代方案

关于Spatie

Spatie 是一家位于比利时的安特卫普的网页设计公司。你可以在我们的网站上找到我们所有开源项目的概述 在这里

许可证

MIT许可证(MIT)。有关更多信息,请参阅 许可证文件