GridFS.
이 페이지의 내용
GridFS 는 MongoDB에 파일을 저장하고 검색하기 위한 사양입니다. GridFS는 두 개의 컬렉션을 사용하여 파일을 저장합니다. 한 컬렉션은 파일 청크(예: fs.chunks
)를 저장하고, 다른 컬렉션은 파일 메타데이터(예: )를fs.files
저장합니다.MongoDB\GridFS\Bucket
클래스는 파일을 PHP 스트림으로 작업하기 위해 이러한 컬렉션에 대한 인터페이스를 제공합니다.
GridFS 버킷 생성
PHP 확장의 MongoDB\Driver\Manager 를 사용하여 GridFS 버킷을 구성할 수 있습니다. 클래스를 selectGridFSBucket()
생성하거나 메서드를 통해 MongoDB PHP 라이브러리의 클래스에서 버킷을 선택합니다.MongoDB\Database
버킷은 다양한 옵션으로 구성할 수 있습니다.
bucketName
버킷의 메타데이터 및 청크 collection에 대한 접두사를 결정합니다. 기본값은"fs"
입니다.chunkSizeBytes
각 청크의 크기를 결정합니다. GridFS는 마지막 청크를 제외하고 이 길이의 청크로 파일을 나눕니다. 기본 크기는261120
입니다(예: 255KiB).readConcern
,readPreference
및writeConcern
옵션을 사용하여MongoDB\Collection
옵션과 마찬가지로 읽기 및 쓰기 작업에 대한 기본값을 지정할 수 있습니다.
쓰기 가능한 스트림으로 파일 업로드
쓰기 가능 스트림을 사용하여 파일을 GridFS에 업로드하려면 스트림을 열고 직접 쓰거나 다른 읽기 가능 스트림의 전체 내용을 한 번에 GridFS에 쓸 수 있습니다.
업로드 스트림을 열고 기록하려면 다음을 수행합니다.
$bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $stream = $bucket->openUploadStream('my-file.txt'); $contents = file_get_contents('/path/to/my-file.txt'); fwrite($stream, $contents); fclose($stream);
한 번의 호출로 읽기 가능한 스트림의 전체 콘텐츠를 업로드하려면 다음 단계를 따르세요.
$bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $file = fopen('/path/to/my-file.txt', 'rb'); $bucket->uploadFromStream('my-file.txt', $file);
읽기 가능한 스트림으로 파일 다운로드
읽기 가능 스트림을 사용하여 GridFS에서 파일을 다운로드하려면 스트림을 열어 직접 읽거나 전체 파일을 한 번에 다운로드할 수 있습니다.
다운로드 스트림을 열고 읽으려면 다음을 수행합니다.
// In practice, $fileId denotes the _id of an existing file in GridFS $fileId = new MongoDB\BSON\ObjectId; $bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $stream = $bucket->openDownloadStream($fileId); $contents = stream_get_contents($stream);
파일을 한 번에 모두 다운로드하여 쓰기 가능한 스트림에 쓰려면 다음을 수행합니다.
// In practice, $fileId denotes the _id of an existing file in GridFS $fileId = new MongoDB\BSON\ObjectId; $bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $file = fopen('/path/to/my-output-file.txt', 'wb'); $bucket->downloadToStream($fileId, $file);
파일 이름 및 버전으로 파일 선택하기
파일 이름과 수정본 번호(선택 사항)로 지정된 파일을 다운로드할 수도 있습니다. 수정본 번호는 동일한 filename
메타데이터 필드를 공유하는 파일을 업로드 날짜별로 정렬하여(예: uploadDate
메타데이터 필드) 구분하는 데 사용됩니다. openDownloadStreamByName()
및 downloadToStreamByName()
에서 허용되는 revision
옵션은 양수 또는 음수일 수 있습니다.
A positive revision
number may be used to select files in order of the oldest upload date. 0
의 수정본은 업로드 날짜가 가장 오래된 파일을 나타내고, 1
의 수정본은 두 번째로 오래된 업로드를 의미합니다.
네거티브 수정본을 사용하여 가장 최근 업로드 날짜 순으로 파일을 선택할 수 있습니다. -1
의 수정본은 업로드 날짜가 가장 최근에 있는 파일을 나타내고, 수정본이 -2
인 파일은 두 번째로 최근에 업로드된 파일을 의미합니다. revision
옵션은 지정하지 않으면 기본값이 -1
입니다.
다음 예에서는 특정 파일의 가장 오래된 버전의 콘텐츠를 다운로드합니다.
$bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $stream = $bucket->openDownloadStreamByName('my-file.txt', ['revision' => 0]); $contents = stream_get_contents($stream);
파일 삭제
_id
기준으로 GridFS 파일을 삭제할 수 있습니다.
// In practice, $fileId denotes the _id of an existing file in GridFS $fileId = new MongoDB\BSON\ObjectId; $bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $bucket->delete($fileId);
파일 메타데이터 찾기
find()
메서드를 사용하면 GridFS 파일에 대한 메타데이터가 포함된 GridFS files collection에서 문서를 검색할 수 있습니다.
$bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $cursor = $bucket->find(['filename' => 'my-file.txt']);
기존 스트림의 파일 메타데이터 액세스
getFileDocumentForStream()
메서드를 사용하여 기존 읽기 또는 쓰기 가능한 GridFS 스트림에 대한 파일 문서를 가져올 수 있습니다.
// In practice, $fileId denotes the _id of an existing file in GridFS $fileId = new MongoDB\BSON\ObjectId; $bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $stream = $bucket->openDownloadStream($fileId); $metadata = $bucket->getFileDocumentForStream($stream);
참고
쓰기 가능한 스트림의 파일 문서는 스트림이 닫힐 때까지 MongoDB에 커밋되지 않으므로 getFileDocumentForStream()
는 일부 필드가 누락된 인메모리 문서만 반환할 수 있습니다(예: length
, md5
).
getFileIdForStream()
메서드를 사용하여 기존 읽기 또는 쓰기 가능한 GridFS 스트림에 대한 _id
을(를) 가져올 수 있습니다. 이는 getFileDocumentForStream()
에서 반환된 객체의 _id
속성에 액세스할 때 편리합니다.
$bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $stream = $bucket->openDownloadStreamByName('my-file.txt'); $fileId = $bucket->getFileIdForStream($stream);