GridFS 파일 시스템
개요
GridFS 용 GridFS 어댑터 를 사용하여 MongoDB 에 대용량 파일을 저장 수 있습니다. GridFS 를 사용하면 데이터와 동일한 데이터베이스 에 크기에 제한 없이 파일을 저장 수 있습니다.
구성
GridFS 운전자 를 사용하기 전에 컴포저 패키지 관리자를 통해 다음 명령을 실행 하여 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 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, ]); }, ], ],
사용법
Laravel 파일 시스템은 지원되는 모든 파일 시스템에 공통 인터페이스를 제공합니다. 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!
Laravel File Storage에 학습 보려면 Laravel File Storage를 참조 하세요. 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 직접 사용할 때 파일 이름 앞에 명시적으로 추가해야 합니다.