nvahalik / laravel-filer
在Laravel中对Flysystem的高级包装。
Requires
- php: >=7.4
- illuminate/database: ^8.2
- illuminate/support: ^8.2
- league/flysystem: ^1
Requires (Dev)
- orchestra/testbench: ^6.17
- phpunit/phpunit: ^9.5
Suggests
- ext-json: *
This package is auto-updated.
Last update: 2024-09-07 07:52:41 UTC
README
该项目是为了满足我们不断增长的Laravel网站的需求而开始的。
- 所有文件的元数据都存储在本地仓库中 - 支持的后端系统包括
json
、database
和memory
(用于测试)。这是为了加速某些操作,这些操作通常需要调用远程文件系统。 - 回退到原始磁盘 - 如果你提供了一个“原始磁盘”列表,此适配器将尝试从那些原始磁盘导入数据到元数据仓库。
- 可插拔策略 - 虽然当前版本只提供了一种策略,但你可以用
Basic
实现,允许1 + 异步、镜像或其他与后端存储适配器的交互。 - 管理数据 + 文件 - 即将推出:查询和管理元数据,以执行以下操作
- 找到存储在单个服务上的文件并镜像它们
- 在保持连续性的同时迁移文件之间的存储
- 从元数据中抽象数据 - 计划在某个时候允许诸如去重和写时复制等操作,以使复制、重命名和删除操作更好地工作。
入门
要开始使用,请要求项目。
Laravel 7, 8(Flysystem V1)
composer require nvahalik/laravel-filer@^1
Laravel 9(Flysystem V3)
composer require nvahalik/laravel-filer@dev-laravel-9
完成后,您需要编辑filer配置文件,然后更新您的文件系统配置。
配置文件
默认情况下,元数据存储在JSON文件中。您可以通过编辑 config/filer.php
来更改默认存储机制,从 json
更改为 database
或 memory
。注意,memory实际上是一个null适配器。JSON适配器包装memory,并在每次操作后进行序列化和保存。
文件系统配置
配置与其它磁盘非常相似
'example' => [
'driver' => 'filer',
'original_disks' => [
'test:s3-original',
],
'id' => 'test',
'disk_strategy' => 'basic',
'backing_disks' => [
'test:s3-new',
'test:s3-original',
],
'visibility' => 'private',
],
original_disks
是一个选项,如果你正在从现有磁盘迁移到filer系统。实际上,这是一个回退,以便在本地元数据存储中找不到的文件将在 original_disks
中搜索。如果找到,将导入其元数据。如果没有找到,该文件将被视为丢失。我们将在稍后介绍如何进行元数据的批量导入。
注意:这将减慢文件系统的速度,直到缓存填满。一旦加载了缓存,您可以移除这些原始磁盘,并且查找文件的额外操作将被消除。
注意2:真正的丢失文件不会进行缓存。因此,如果文件丢失,并且您反复尝试断言其存在,它将反复搜索。这可以通过缓存结果或类似的 missing-files
缓存来改进。
id
只是元数据存储的内部ID。不允许在单个 id
的元数据内存在文件重复,例如,但对于不同的 id
,则是允许的。
disk_strategy
目前只有一个选项: 'basic'
,但将是可插拔的,允许添加和使用不同的策略。basic
策略只是将数据写入提供的 backing_disks
列表中的第一个磁盘。
backing_disks
允许您定义多个 flysystem 磁盘以使用。想要使用多个与 S3 兼容的适配器?您可以。请注意,对于基本适配器,磁盘的顺序决定了尝试它们的顺序。
一些示例
给定上述配置,如果运行以下代码
Storage::disk('example')->has('does/not/exist.txt');
- 将搜索现有的元数据存储库。
- 然后,将搜索单个 'original_disks'。
- 最后,操作将失败。
Storage::disk('example')->put('does/not/exist.txt', 'content');
- 将搜索现有的元数据存储库。
- 然后,将搜索单个 'original_disks'。
- 然后,将在
test:s3-new
上尝试写入。 - 如果失败,则将在
test:s3-original
上尝试写入。 - 如果任何写入成功,将返回该适配器的后端信息,并更新条目元数据。
- 如果任何一个失败,则返回 false,并且操作将失败。
导入元数据
如果您已经在 S3 上有很多文件,可以使用 filer:import-s3-metadata
命令将数据导入到您的元数据存储库中
# Grab the existing contents. s3cmd ls s3://bucket-name -rl > s3output.txt # Import that data into the "example" storageId. php artisan filer:import-s3-metadata example s3output.txt
导入器使用 File::lines()
加载数据,因此不会消耗太多内存。此外,它将查看 URL 中的存储桶名称,该 URL 存在于输出中,并尝试在您现有的文件系统配置中找到它。
可见性
默认情况下,它将从此处获取文件系统配置。如果没有找到或未提供 --visibility
,则默认为 private
。
文件名剥离
您可以通过指定 --strip
选项从文件名中剥离字符串。
磁盘
如果您需要直接指定磁盘或想要以其他方式覆盖它,只需使用 --disk
传递它即可。这不会进行检查,所以不要弄错。
示例
php artisan filer:import-s3-metadata example s3output.txt --disk=some-disk --visibility=public --strip=prefix-dir/
上述命令将从导入的 URL 中剥离 prefix-dir/
,将它们的可见性设置为公共,并将它们的默认后端磁盘标记为 some-disk
。