Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Lambda MongoDB

GridFS ファイルシステム

You can use the GridFS Adapter for Flysystem to store large files in MongoDB. GridFS lets you store files of unlimited size in the same database as your data.

GridFS ドライバーを使用する前に、次のコマンドを実行して、Composer パッケージ マネージャーを介して Flysystem GridFS パッケージをインストールします。

composer require league/flysystem-gridfs

Configure Laravel File Storage to use the gridfs driver in 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 database の名前。 データベースが指定されていない場合、ドライバーは接続のデータベースを使用します。

bucket

GridFS バケットの名前またはインスタンス。 データベースには、名前で識別される複数のバケットを含めることができます。 デフォルトはfsです。

prefix

バケットに保存されるファイルの名前のプレフィックスを指定します。 ファイルを別のコレクションに保存するには、プレフィックスを使用する代わりに、個別のバケットを使用することをお勧めします。 プレフィックスは、先頭にスラッシュ( / )で始まってはなりません。

read-only

trueの場合、GridFS バケットへの書込みは無効になります。 書き込み操作は、 throwの構成に応じてfalseを返すか、例外をスローします。 デフォルトは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,
]);
},
],
],

Lambda ファイルシステムは、サポートされているすべてのファイルシステムに共通のインターフェースを提供します。 gridfsディスクはlocalディスクと同じ方法で使用できます。

次の例では、ファイルを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!

To learn more Laravel File Storage, see Laravel File Storage in the Laravel documentation.

GridFS はアップロードされたファイルごとにファイル ドキュメントを作成します。 これらのドキュメントには、ファイル名や一意の ObjectId などのメタデータが含まれています。 複数のドキュメントが同じファイル名を共有する場合、それらは「リビジョニング」と見なされ、作成タイムスタンプによってさらに区別されます。

Lambda 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 を直接使用する際は、ファイル名を明示的に前に追加する必要があります。

戻る

トランザクション