Menu Docs
Página inicial do Docs
/ / /
Laravel MongoDB

Sistemas de arquivos GridFS

Você pode usar o adaptador GridFS para Flysystem para armazenar arquivos grandes no MongoDB. O GridFS permite armazenar arquivos de tamanho ilimitado no mesmo banco de dados de dados que seus dados.

Antes de usar o driver GridFS , instale o pacote Flysystem GridFS através do gerenciador de pacote Composer executando o seguinte comando:

composer require league/flysystem-gridfs

Configurar armazenamento de arquivo Laravel para usar o gridfs driver no config/filesystems.php:

'disks' => [
'gridfs' => [
'driver' => 'gridfs',
'connection' => 'mongodb',
// 'database' => null,
// 'bucket' => 'fs',
// 'prefix' => '',
// 'read-only' => false,
// 'throw' => false,
],
],

Você pode definir as seguintes configurações em config/filesystems.php:

Contexto
Descrição
driver
Obrigatório. Especifica o driver do sistema de arquivos a ser usado. Deve ser gridfs para MongoDB.
connection
Conexão do banco de dados usada para armazenar tarefas. Deve ser uma conexão mongodb . O driver usa a conexão padrão se nenhuma conexão for especificada.
database
Nome do banco de banco de dados MongoDB para o bucket GridFS . O driver utiliza o banco de dados de dados da conexão se um banco de dados de dados não for especificado.
bucket
Nome ou instância do bucket GridFS . Um banco de dados de dados pode conter vários buckets identificados por seu nome. Padrão é fs.
prefix
Especifica um prefixo para o nome dos arquivos armazenados no bucket. O uso de um bucket distinto é recomendado para armazenar os arquivos em uma coleção diferente, em vez de usar um prefixo. O prefixo não deve começar com uma barra (/).
read-only
Se true, a gravação no GridFS estará desabilitada. As operações de gravação retornarão false ou lançarão exceções , dependendo da configuração de throw. O padrão é false.
throw
Se true, exceções são lançadas quando uma operação não pode ser executada. Se false,
as operações retornam true em caso de sucesso e false em caso de erro. O padrão é false.

Você também pode usar uma fábrica ou um nome de serviço para criar uma instância do MongoDB\GridFS\Bucket. Neste caso, as opções connection e database são ignoradas:

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,
]);
},
],
],

O Laravel Filesystem fornece uma interface comum para todos os sistemas de arquivos suportados. Você pode utilizar o disco gridfs da mesma forma que o disco local .

O exemplo a seguir grava um arquivo no disco gridfs e lê o arquivo:

$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!

Para saber mais Armazenamento de arquivos Laravel, consulte Armazenamento de arquivos Laravel na documentação do Laravel.

O GridFS cria documentos de arquivo para cada arquivo carregado. Esses documentos contêm metadados, incluindo o nome do arquivo e um ObjectId exclusivo. Se vários documentos compartilharem o mesmo nome de arquivo, eles serão considerados "revisões" e ainda distinguidos pelos registros de data e hora da criação.

A integração do Laravel MongoDB usa o adaptador GridFS Flysystem. Ele interage com as revisões de arquivos das seguintes maneiras:

  • A leitura de um arquivo lê a última revisão deste nome de arquivo

  • Escrever um arquivo cria uma nova revisão para este nome de arquivo

  • Renomear um arquivo renomeia todas as revisões deste nome de arquivo

  • Excluir um arquivo exclui todas as revisões deste nome de arquivo

O adaptador GridFS para Flysystem não fornece acesso a uma revisão específica de um nome de arquivo. Você deve usar a API do GridFS se precisar trabalhar com revisões, conforme mostrado no código a seguir:

// 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])

Observação

Se você especificar a configuração prefix do sistema de arquivos, terá que preceder explicitamente os nomes dos arquivos ao usar diretamente a API do GridFS .

Voltar

Transações