Docs 菜单
Docs 主页
/ / /
Laravel MongoDB

GridFS 文件系统

您可以使用适用于 Flysystem 的 GridFS 适配器 在 MongoDB 中存储大型文件。 GridFS 允许您将无限大小的文件与数据存储在同一数据库中。

在使用 GridFS 驱动程序之前,请运行以下命令,通过 Composer 包管理器安装 Flysystem GridFS 包:

composer require league/flysystem-gridfs

配置 Laravel 文件存储 gridfs在 中使用config/filesystems.php 驱动程序:

'disks' => [
'gridfs' => [
'driver' => 'gridfs',
'connection' => 'mongodb',
// 'database' => null,
// 'bucket' => 'fs',
// 'prefix' => '',
// 'read-only' => false,
// 'throw' => false,
],
],

您可以在config/filesystems.php中配置以下设置:

设置
说明
driver
必需。指定要使用的文件系统驱动程序。对于 MongoDB,必须为gridfs
connection
用于存储作业的数据库连接。它必须是mongodb连接。如果未指定连接,则驱动程序将使用默认连接。
database
GridFS 存储桶的 MongoDB 数据库名称。如果未指定数据库,驱动程序将使用连接的数据库。
bucket
GridFS 存储桶的名称或实例。一个数据库可以包含多个存储桶,通过其名称进行标识。默认为fs
prefix
指定存储桶中存储的文件的名称前缀。建议使用不同的存储桶,而不是使用前缀,以便将文件存储在不同的集合中。前缀不应以前导斜杠 ( / ) 开头。
read-only
如果为true ,则禁用写入 GridFS 存储桶。写入操作将返回false或抛出异常,具体取决于throw的配置。默认为false
throw
如果为true ,则无法执行操作时会引发异常。如果false
操作成功时返回true ,出错时返回false 。默认为false

您还可以使用工厂或服务名称来创建MongoDB\GridFS\Bucket的实例。在这种情况下,选项connectiondatabase将被忽略:

use Illuminate\Foundation\Application;
use MongoDB\GridFS\Bucket;
'disks' => [
'gridfs' => [
'driver' => 'gridfs',
'bucket' => static function (Application $app): Bucket {
return $app['db']->connection('mongodb')
->getMongoDB()
->selectGridFSBucket([
'bucketName' => 'avatars',
'chunkSizeBytes' => 261120,
]);
},
],
],

Laravel Filesystem 为所有支持的文件系统提供了一个通用接口。您可以按照与local磁盘相同的方式使用gridfs磁盘。

以下示例将文件写入gridfs磁盘,然后读取该文件:

$disk = Storage::disk('gridfs');
// Write the file "hello.txt" into GridFS
$disk->put('hello.txt', 'Hello World!');
// Read the file
echo $disk->get('hello.txt'); // Hello World!

要了解 Laravel 文件存储的更多信息,请参阅 Laravel 文件存储 在 Laravel 文档中。

GridFS 为每个上传的文件创建文件文档。这些文档包含元数据,包括文件名和唯一的 ObjectId。如果多个文档共享相同的文件名,则它们被视为“修订”,并通过创建时间戳进一步区分。

Laravel MongoDB 集成使用 GridFS Flysystem 适配器。它通过以下方式与文件修订交互:

  • 读取文件会读取此文件名的最新修订版本

  • 写入文件会创建此文件名的新修订版本

  • 重命名文件会重命名该文件的所有修订版本

  • 删除文件会删除此文件名的所有修订版本

Flysystem 的 GridFS 适配器不提供对文件名的特定修订版的访问权限。如果需要使用修订版本,则必须使用GridFS API ,如以下代码所示:

// Create a bucket service from the MongoDB connection
/** @var \MongoDB\GridFS\Bucket $bucket */
$bucket = $app['db']->connection('mongodb')->getMongoDB()->selectGridFSBucket();
// Download the last but one version of a file
$bucket->openDownloadStreamByName('hello.txt', ['revision' => -2])

注意

如果指定prefix文件系统设置,则在直接使用 GridFS API 时必须显式添加文件名。

后退

事务

来年

问题与帮助