文档菜单
文档首页
/ / /
Laravel MongoDB

GridFS 文件系统

您可以使用Flysystem 的 GridFS 适配器 用于在 MongoDB 中存储大文件。GridFS 允许你在与数据相同的数据库中存储任意大小的文件。

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

composer require league/flysystem-gridfs

配置 Laravel 文件存储 以使用 gridfs 驱动程序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
网格FS存储桶的名称或实例。数据库可以包含多个通过名称标识的存储桶。默认为fs
前缀
指定存储在存储桶中的文件的名称前缀。建议使用不同的存储桶来存储文件到不同的集合,而不是使用前缀。前缀不应以反斜杠开头(/)。
只读
如果设置为true,则禁用对GridFS存储桶的写入。写入操作将返回false或根据throw的配置抛出异常。默认为false
抛出
如果设置为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文件系统为所有支持的文件系统提供了一个通用的接口。您可以使用与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时显式地预置文件名。

返回

事务