문서 메뉴
문서 홈
/ / /
Laravel MongoDB

GridFS 파일 시스템

Flysystem용 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 데이터베이스의 이름입니다. 데이터베이스가 지정되지 않은 경우 드라이버는 연결의 데이터베이스를 사용합니다.
bucket
GridFS 버킷의 이름 또는 인스턴스입니다. 데이터베이스에는 이름으로 식별되는 여러 버킷이 포함될 수 있습니다. 기본값은 fs 입니다.
prefix
버킷에 저장된 파일 이름의 접두사를 지정합니다. 파일을 다른 컬렉션에 저장하려면 접두사를 사용하는 대신 별개의 버킷을 사용하는 것이 좋습니다. 접두사는 슬래시(/)로 시작하지 않아야 합니다.
read-only
true 이면 GridFS 버킷에 대한 쓰기가 비활성화됩니다. 쓰기 작업은 throw 의 구성에 따라 false 을 반환하거나 예외를 발생시킵니다. 기본값은 false 입니다.
throw
true 인 경우 작업을 수행할 수 없을 때 예외가 발생합니다. false 인 경우,
작업은 성공하면 true 를 반환하고 실패하면 false 을 반환합니다. 기본값은 false 입니다.

팩토리 또는 서비스 이름을 사용하여 MongoDB\GridFS\Bucket 인스턴스를 만들 수도 있습니다. 이 경우 connectiondatabase 옵션은 무시됩니다.

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를 직접 사용할 때 파일 이름 앞에 명시적으로 추가해야 합니다.

돌아가기

트랜잭션