Docs Menu
Docs Home
/ /

Sistemas de archivos GridFS

Puedes utilizar el Adaptador GridFS para Flysystem para almacenar archivos grandes en MongoDB. GridFS permite almacenar archivos de tamaño ilimitado en la misma base de datos que tus datos.

Antes de utilizar el controlador GridFS, instale el paquete GridFS de Flysystem a través del administrador de paquetes Composer ejecutando el siguiente comando:

composer require league/flysystem-gridfs

Configurar el almacenamiento de archivos de Laravel para utilizar el gridfs conductor en config/filesystems.php:

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

Puede configurar los siguientes ajustes en config/filesystems.php:

Configuración
Descripción

driver

Obligatorio. Especifica el controlador del sistema de archivos que se usará. Debe ser gridfs para MongoDB.

connection

Conexión de base de datos utilizada para almacenar trabajos. Debe ser una conexión mongodb. El controlador utiliza la conexión predeterminada si no se especifica ninguna.

database

Nombre de la base de datos MongoDB para el bucket GridFS. El controlador utiliza la base de datos de la conexión si no se especifica ninguna.

bucket

Nombre o instancia del bucket GridFS. Una base de datos puede contener múltiples colecciones identificadas por su nombre. Por defecto es fs.

prefix

Especifica un prefijo para el nombre de los archivos almacenados en el bucket. Se recomienda usar un bucket distinto para almacenar los archivos en una colección diferente, en lugar de usar un prefijo. El prefijo no debe empezar con una barra diagonal inicial (/).

read-only

Si es true, la escritura en el bucket de GridFS está deshabilitada. Las operaciones de escritura devolverán false o generarán excepciones según la configuración de throw. El valor predeterminado es false.

throw

Si true, se lanzan excepciones cuando no se puede realizar una operación. Si false, las operaciones devuelven true en caso de éxito y false en caso de error. El valor predeterminado es false.

También puede usar una fábrica o un nombre de servicio para crear una instancia de MongoDB\GridFS\Bucket. En este caso, se ignoran las opciones connection y database:

use Illuminate\Foundation\Application;
use MongoDB\GridFS\Bucket;
'disks' => [
'gridfs' => [
'driver' => 'gridfs',
'bucket' => static function (Application $app): Bucket {
return $app['db']->connection('mongodb')
->getDatabase()
->selectGridFSBucket([
'bucketName' => 'avatars',
'chunkSizeBytes' => 261120,
]);
},
],
],

El sistema de archivos de Laravel proporciona una interfaz común para todos los sistemas de archivos compatibles. Puedes usar el disco gridfs de la misma manera que el disco local.

El siguiente ejemplo escribe un archivo en el disco gridfs y luego lee el archivo:

$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 obtener más información sobre el almacenamiento de archivos de Laravel, consulte Almacenamiento de archivos de Laravel en la documentación de Laravel.

GridFS crea documentos de archivos para cada archivo subido. Estos documentos contienen metadatos, incluido el nombre del archivo y un ObjectId único. Si varios documentos comparten el mismo nombre de archivo, se consideran "revisiones" y se distinguen aún más por marcas de tiempo de creación.

Laravel MongoDB utiliza el adaptador Flysystem de GridFS. Este interactúa con las revisiones de archivos de las siguientes maneras:

  • Al leer un archivo se lee la última revisión de este nombre de archivo.

  • Escribir un archivo crea una nueva revisión para este nombre de archivo

  • Al cambiar el nombre de un archivo se cambian todas las revisiones de este nombre de archivo.

  • Al eliminar un archivo se eliminan todas las revisiones de este nombre de archivo.

El adaptador GridFS para Flysystem no permite el acceso a una revisión específica de un nombre de archivo. Debe usar la API GridFS si necesita trabajar con revisiones, como se muestra en el siguiente código:

// Create a bucket service from the MongoDB connection
/** @var \MongoDB\GridFS\Bucket $bucket */
$bucket = $app['db']->connection('mongodb')->getDatabase()->selectGridFSBucket();
// Download the last but one version of a file
$bucket->openDownloadStreamByName('hello.txt', ['revision' => -2])

Nota

Si especifica la configuración prefix del Sistema de archivos, deberá anteponer explícitamente los nombres de los archivos al usar la API de GridFS directamente.

Volver

Transacciones