Overview
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
では次の設定を構成できます。
設定 | 説明 |
---|---|
| 必須。 使用するファイルシステム ドライバーを指定します。 MongoDB では |
| ジョブを保存するために使用されるデータベース接続。 |
| GridFS バケット用の MongoDB database の名前。 データベースが指定されていない場合、ドライバーは接続のデータベースを使用します。 |
| GridFS バケットの名前またはインスタンス。 データベースには、名前で識別される複数のバケットを含めることができます。 デフォルトは |
| バケットに保存されるファイルの名前のプレフィックスを指定します。 ファイルを別のコレクションに保存するには、プレフィックスを使用する代わりに、個別のバケットを使用することをお勧めします。 プレフィックスは、先頭にスラッシュ( |
|
|
|
|
ファクトリーまたはサービス名を使用してMongoDB\GridFS\Bucket
のインスタンスを作成することもできます。 この場合、オプションconnection
とdatabase
は無視されます。
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 を直接使用する際は、ファイル名を明示的に前に追加する必要があります。