ambitionphp / laravel-medialibrary
将文件与Eloquent模型关联
Requires
- php: ^7.2
- ext-fileinfo: *
- ext-json: *
- illuminate/bus: ~5.8.35|^6.0|^7.0
- illuminate/console: ~5.8.35|^6.0|^7.0
- illuminate/database: ~5.8.35|^6.0|^7.0
- illuminate/pipeline: ~5.8.35|^6.0|^7.0
- illuminate/support: ~5.8.35|^6.0|^7.0
- league/flysystem: ^1.0.8
- maennchen/zipstream-php: ^1.0
- spatie/image: ^1.4.0
- spatie/pdf-to-image: ^2.0
- spatie/temporary-directory: ^1.1
- symfony/console: ^4.4|^5.0
Requires (Dev)
- ext-pdo_sqlite: *
- doctrine/dbal: ^2.5.2
- guzzlehttp/guzzle: ^6.3
- league/flysystem-aws-s3-v3: ^1.0.13
- mockery/mockery: ^1.0
- orchestra/testbench: ^3.8|^4.0|^5.0
- phpunit/phpunit: ^8.0
- spatie/phpunit-snapshot-assertions: ^2.0
Suggests
- league/flysystem-aws-s3-v3: Required to use AWS S3 file storage
- php-ffmpeg/php-ffmpeg: Required for generating video thumbnails
Conflicts
- php-ffmpeg/php-ffmpeg: <0.6.1
- dev-master
- v8.x-dev
- 7.18.3
- 7.18.2
- 7.18.1
- 7.18.0
- 7.17.1
- 7.17.0
- 7.16.2
- 7.16.1
- 7.16.0
- 7.14.2
- 7.14.1
- 7.14.0
- 7.13.0
- 7.12.4
- 7.12.3
- 7.12.2
- 7.12.1
- 7.12.0
- 7.11.0
- 7.10.1
- 7.10.0
- 7.9.0
- 7.8.2
- 7.8.1
- 7.8.0
- 7.7.0
- 7.6.9
- 7.6.8
- 7.6.7
- 7.6.6
- 7.6.5
- 7.6.4
- 7.6.3
- 7.6.2
- 7.6.1
- 7.6.0
- 7.5.6
- 7.5.5
- 7.5.4
- 7.5.3
- 7.5.2
- 7.5.1
- 7.5.0
- 7.4.3
- 7.4.2
- 7.4.1
- 7.4.0
- 7.3.12
- 7.3.11
- 7.3.10
- 7.3.9
- 7.3.8
- 7.3.7
- 7.3.6
- 7.3.5
- 7.3.4
- 7.3.3
- 7.3.2
- 7.3.1
- 7.3.0
- 7.1.8
- 7.1.7
- 7.1.6
- 7.1.5
- 7.1.4
- 7.1.3
- 7.1.2
- 7.1.1
- 7.1.0
- 7.0.6
- 7.0.5
- 7.0.4
- 7.0.3
- 7.0.2
- 7.0.1
- 7.0.0
- v6.x-dev
- 6.9.2
- 6.9.1
- 6.9.0
- 6.8.0
- 6.7.0
- 6.6.9
- 6.6.8
- 6.6.7
- 6.6.6
- 6.6.5
- 6.6.4
- 6.6.3
- 6.6.2
- 6.6.1
- 6.6.0
- 6.5.0
- 6.4.2
- 6.4.1
- 6.4.0
- 6.3.0
- 6.2.1
- 6.2.0
- 6.1.3
- 6.1.2
- 6.1.1
- 6.1.0
- 6.0.0
- v5.x-dev
- 5.14.0
- 5.13.2
- 5.13.1
- 5.13.0
- 5.12.1
- 5.12.0
- 5.11.1
- 5.11.0
- 5.10.0
- 5.9.0
- 5.8.2
- 5.8.1
- 5.8.0
- 5.7.0
- 5.6.0
- 5.5.3
- 5.5.2
- 5.5.1
- 5.5.0
- 5.4.0
- 5.3.3
- 5.3.2
- 5.3.1
- 5.3.0
- 5.2.0
- 5.1.0
- 5.0.2
- 5.0.1
- 5.0.0
- v4.x-dev
- 4.13.5
- 4.13.4
- 4.13.3
- 4.13.2
- 4.13.1
- 4.13.0
- 4.12.1
- 4.12.0
- 4.11.3
- 4.11.2
- 4.11.1
- 4.11.0
- 4.10.3
- 4.10.2
- 4.10.1
- 4.10.0
- 4.9.5
- 4.9.4
- 4.9.3
- 4.9.2
- 4.9.1
- 4.9.0
- 4.8.4
- 4.8.3
- 4.8.2
- 4.8.1
- 4.8.0
- 4.7.1
- 4.7.0
- 4.6.0
- 4.5.0
- 4.4.1
- 4.4.0
- 4.3.0
- 4.2.1
- 4.2
- 4.1
- 4.0.1
- 4.0.0
- v3.x-dev
- 3.18.0
- 3.17.4
- 3.17.3
- 3.17.2
- 3.17.1
- 3.17.0
- 3.16.1
- 3.16.0
- 3.15.0
- 3.14.1
- 3.14.0
- 3.13.4
- 3.13.3
- 3.12.2
- 3.12.1
- 3.12.0
- 3.11.3
- 3.11.2
- 3.11.1
- 3.11.0
- 3.10.2
- 3.10.1
- 3.10.0
- 3.9.2
- 3.9.1
- 3.9.0
- 3.8.0
- 3.7.3
- 3.7.2
- 3.7.1
- 3.7.0
- 3.6.0
- 3.5.1
- 3.5.0
- 3.4.0
- 3.3.1
- 3.3.0
- 3.2.5
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.1
- 3.0.0
- v2.x-dev
- 2.3.0
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.1
- 2.0.0
- v1.x-dev
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.0
- 0.1.0
- dev-v8-pro
- dev-editorconfig-fix
- dev-temporary-uploads
- dev-fix-duplicate-files-in-zip-stream
- dev-image-factory
This package is auto-updated.
Last update: 2024-09-28 08:19:47 UTC
README
此包可以将各种类型的文件与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 是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到所有开源项目的概述 在这里。
支持我们
我们投入了大量资源来创建 一流的开放源代码包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从您的家乡给我们寄来明信片,说明您正在使用我们的哪些包。您可以在我们的 联系方式页面 找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙上。
文档
您可以在 https://docs.spatie.be/laravel-medialibrary/v7 上找到文档。
如果您在使用包时遇到困难?发现了bug?您有任何一般性的问题或对改进媒体库的建议?请随时在GitHub上 创建一个问题,我们将尽快解决。
如果您发现了关于安全性的bug,请通过 freek@spatie.be 发送邮件,而不是使用问题跟踪器。
要求
安装
您可以使用以下命令通过composer安装此包
composer require "spatie/laravel-medialibrary:^7.0.0"
包将自动注册自己。
您可以使用以下命令发布迁移
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\Models\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/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联系,而不是使用问题跟踪器。
致谢
感谢Nicolas Beauvais为此存储库中的问题提供帮助。
替代方案
支持我们
Spatie是一家位于比利时的安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述在此。
您的业务依赖于我们的贡献吗?在Patreon上联系我们并提供支持。所有承诺都将致力于分配人力资源进行维护和开发新酷炫的功能。
许可
MIT许可证(MIT)。有关更多信息,请参阅许可文件