문서 메뉴
문서 홈
/ / /
PHP 라이브러리 매뉴얼
/

GridFS.

이 페이지의 내용

  • GridFS 버킷 생성
  • 쓰기 가능한 스트림으로 파일 업로드
  • 읽기 가능한 스트림으로 파일 다운로드
  • 파일 이름 및 버전으로 파일 선택하기
  • 파일 삭제
  • 파일 메타데이터 찾기
  • 기존 스트림의 파일 메타데이터 액세스

GridFS 는 MongoDB에 파일을 저장하고 검색하기 위한 사양입니다. GridFS는 두 개의 컬렉션을 사용하여 파일을 저장합니다. 한 컬렉션은 파일 청크(예: fs.chunks)를 저장하고, 다른 컬렉션은 파일 메타데이터(예: )를fs.files 저장합니다.MongoDB\GridFS\Bucket 클래스는 파일을 PHP 스트림으로 작업하기 위해 이러한 컬렉션에 대한 인터페이스를 제공합니다.

PHP 확장의 MongoDB\Driver\Manager 를 사용하여 GridFS 버킷을 구성할 수 있습니다. 클래스를 selectGridFSBucket() 생성하거나 메서드를 통해 MongoDB PHP 라이브러리의 클래스에서 버킷을 선택합니다.MongoDB\Database

버킷은 다양한 옵션으로 구성할 수 있습니다.

  • bucketName 버킷의 메타데이터 및 청크 collection에 대한 접두사를 결정합니다. 기본값은 "fs" 입니다.

  • chunkSizeBytes 각 청크의 크기를 결정합니다. GridFS는 마지막 청크를 제외하고 이 길이의 청크로 파일을 나눕니다. 기본 크기는 261120 입니다(예: 255KiB).

  • readConcern, readPreferencewriteConcern 옵션을 사용하여 MongoDB\Collection 옵션과 마찬가지로 읽기 및 쓰기 작업에 대한 기본값을 지정할 수 있습니다.

쓰기 가능 스트림을 사용하여 파일을 GridFS에 업로드하려면 스트림을 열고 직접 쓰거나 다른 읽기 가능 스트림의 전체 내용을 한 번에 GridFS에 쓸 수 있습니다.

업로드 스트림을 열고 기록하려면 다음을 수행합니다.

<?php
$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);

한 번의 호출로 읽기 가능한 스트림의 전체 콘텐츠를 업로드하려면 다음 단계를 따르세요.

<?php
$bucket = (new MongoDB\Client)->test->selectGridFSBucket();
$file = fopen('/path/to/my-file.txt', 'rb');
$bucket->uploadFromStream('my-file.txt', $file);

읽기 가능 스트림을 사용하여 GridFS에서 파일을 다운로드하려면 스트림을 열어 직접 읽거나 전체 파일을 한 번에 다운로드할 수 있습니다.

다운로드 스트림을 열고 읽으려면 다음을 수행합니다.

<?php
// 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);

파일을 한 번에 모두 다운로드하여 쓰기 가능한 스트림에 쓰려면 다음을 수행합니다.

<?php
// 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 입니다.

다음 예에서는 특정 파일의 가장 오래된 버전의 콘텐츠를 다운로드합니다.

<?php
$bucket = (new MongoDB\Client)->test->selectGridFSBucket();
$stream = $bucket->openDownloadStreamByName('my-file.txt', ['revision' => 0]);
$contents = stream_get_contents($stream);

_id 기준으로 GridFS 파일을 삭제할 수 있습니다.

<?php
// 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에서 문서를 검색할 수 있습니다.

<?php
$bucket = (new MongoDB\Client)->test->selectGridFSBucket();
$cursor = $bucket->find(['filename' => 'my-file.txt']);

getFileDocumentForStream() 메서드를 사용하여 기존 읽기 또는 쓰기 가능한 GridFS 스트림에 대한 파일 문서를 가져올 수 있습니다.

<?php
// 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 속성에 액세스할 때 편리합니다.

<?php
$bucket = (new MongoDB\Client)->test->selectGridFSBucket();
$stream = $bucket->openDownloadStreamByName('my-file.txt');
$fileId = $bucket->getFileIdForStream($stream);

돌아가기

사용 중 암호화

다음

색인