mustafatoker/laravel-medialibrary-mongodb

将文件与Eloquent模型关联 - MongoDB

7.5.2 2018-11-01 07:57 UTC

This package is not auto-updated.

Last update: 2024-09-18 14:38:26 UTC


README

Latest Version Build Status Quality Score StyleCI Total Downloads

此包可以将各种文件与Eloquent模型关联起来。它提供了一个简单的API来进行操作。要了解有关它的所有信息,请前往详细的文档

以下是一些你可以做的简短示例

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

它可以直接处理你的上传

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

想要在其他文件系统上存储一些大文件?没问题

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

文件的存储由Laravel的文件系统处理,因此你可以使用你喜欢的任何文件系统。此外,该包还可以在媒体库中添加的图片和pdf上进行图像处理。

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

使用较旧的Laravel版本?

此版本的中介库与Laravel 5.5及更高版本兼容。

如果你使用较旧的Laravel版本,可以使用较旧的包版本。这些版本不再维护,但应该非常稳定。我们仍然接受小的错误修复。

文档

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

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

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

要求

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

安装

您可以通过composer使用此json将此包添加到composer.json

composer require mustafatoker/laravel-medialibrary-mongodb

然后运行composer install/update或类似命令。

该包将自动注册自己。

你可以通过以下方式发布迁移

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've configured in config/filesystems.php.
     */
    'disk_name' => 'public',

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

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

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

    /*
     * The engine that should perform the image conversions.
     * Should be either `gd` or `imagick`.
     */
    'image_driver' => 'gd',

    /*
     * 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.
     */
    'url_generator' => null,

    /*
     * The class that contains the strategy for determining a media file's path.
     */
    'path_generator' => 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',
        ],
    ],

    /*
     * These generators will be used to create an image of media files.
     */
    'image_generators' => [
        Spatie\MediaLibrary\ImageGenerators\FileTypes\Image::class,
        Spatie\MediaLibrary\ImageGenerators\FileTypes\Webp::class,
        Spatie\MediaLibrary\ImageGenerators\FileTypes\Pdf::class,
        Spatie\MediaLibrary\ImageGenerators\FileTypes\Svg::class,
        Spatie\MediaLibrary\ImageGenerators\FileTypes\Video::class,
    ],

    /*
     * Medialibrary will try to optimize all converted images by removing
     * metadata and applying a little bit of compression. These are
     * the optimizers that will be used by default.
     */
    'image_optimizers' => [
        Spatie\ImageOptimizer\Optimizers\Jpegoptim::class => [
            '--strip-all', // this strips out all text information such as comments and EXIF data
            '--all-progressive', // this will make sure the resulting image is a progressive one
        ],
        Spatie\ImageOptimizer\Optimizers\Pngquant::class => [
            '--force', // required parameter for this package
        ],
        Spatie\ImageOptimizer\Optimizers\Optipng::class => [
            '-i0', // this will result in a non-interlaced, progressive scanned image
            '-o2', // this set the optimization level to two (multiple IDAT compression trials)
            '-quiet', // required parameter for this package
        ],
        Spatie\ImageOptimizer\Optimizers\Svgo::class => [
            '--disable=cleanupIDs', // disabling because it is known to cause troubles
        ],
        Spatie\ImageOptimizer\Optimizers\Gifsicle::class => [
            '-b', // required parameter for this package
            '-O3', // this produces the slowest but best results
        ],
    ],

    /*
     * The path where to store temporary files while performing image conversions.
     * If set to null, storage_path('medialibrary/temp') will be used.
     */
    'temporary_directory_path' => null,

    /*
     * FFMPEG & FFProbe binaries path, only used if you try to generate video
     * thumbnails and have installed the php-ffmpeg/php-ffmpeg composer
     * dependency.
     */
    'ffmpeg_binaries' => '/usr/bin/ffmpeg',
    'ffprobe_binaries' => '/usr/bin/ffprobe',
];

默认情况下,中介库将在Laravel的public磁盘上存储文件。如果你想使用专门的磁盘,你应该在app/config/filesystems.php中添加一个磁盘。这是一个典型的配置

    ...
    'disks' => [
        ...

        'media' => [
            'driver' => 'local',
            'root'   => public_path().'/media',
            'url' => env('APP_URL') . '/media',
            'visibility' => 'public',
        ],
    ...

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

Lumen支持

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

使用以下命令进行安装

composer require spatie/laravel-medialibrary

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

// 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 配置文件中指定的 default_filesystem

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

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

测试

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

vendor/bin/phpunit

升级

有关详细信息,请参阅UPGRADING

变更日志

有关最近更改的更多信息,请参阅CHANGELOG

贡献

有关详细信息,请参阅CONTRIBUTING

安全

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

明信片软件

您可以自由使用此包,但如果它进入您的生产环境,我们非常感谢您从家乡寄给我们一张明信片,说明您正在使用我们的哪个包。

我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。

我们将在我们的公司网站上发布所有收到的明信片[在此处查看]

鸣谢

非常感谢Nicolas Beauvais为这个存储库中的问题提供帮助。

替代方案

支持我们

Spatie 是一家总部位于比利时的安特卫普网络设计公司。您可以在我们的网站上找到所有开源项目的概述[在此处查看]

您的业务依赖于我们的贡献吗?请联系我们并在Patreon上支持我们。所有承诺都将用于分配人力资源以维护和开发新功能。

许可

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