GridFS ファイルシステム
Overview
GridFS用の GridFS アダプター を使用して、 MongoDBに大容量のファイルを保存できます。GridFSを使用すると、データと同じデータベースに無制限サイズのファイルを保存できます。
構成
GridFS ドライバーを使用する前に、次のコマンドを実行して、Composer パッケージ マネージャーを介して Flysystem GridFS パッケージをインストールします。
composer require league/flysystem-gridfs
Lambda ファイル ストレージの 構成 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 database の名前。 データベースが指定されていない場合、ドライバーは接続のデータベースを使用します。 |
bucket | GridFS バケットの名前またはインスタンス。 データベースには、名前で識別される複数のバケットを含めることができます。 デフォルトは fs です。 |
prefix | バケットに保存されるファイルの名前のプレフィックスを指定します。 ファイルを別のコレクションに保存するには、プレフィックスを使用する代わりに、個別のバケットを使用することをお勧めします。 プレフィックスは、先頭にスラッシュ( / )で始まってはなりません。 |
read-only | true の場合、GridFS バケットへの書込みは無効になります。 書き込み操作は、 throw の構成に応じてfalse を返すか、例外をスローします。 デフォルトはfalse です。 |
throw |
|
ファクトリーまたはサービス名を使用して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!
Lalavel ファイル ストレージの詳細については、「 Lambel ファイル ストレージ 」を参照してください。 Lambda のドキュメント。
バージョン管理
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 を直接使用する際は、ファイル名を明示的に前に追加する必要があります。