Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 driver de GridFS, instala el paquete Flysystem GridFS mediante el gestor de paquetes Composer ejecutando el siguiente comando:

composer require league/flysystem-gridfs

Configura Laravel archivo almacenamiento para utilizar el gridfs driver 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 a utilizar. Debe ser gridfs para MongoDB.

connection

Conexión a la base de datos utilizada para almacenar tareas. Debe ser una conexión mongodb. El driver usa la conexión por defecto si no se especifica una conexión.

database

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

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 que se almacenan en el bucket. Se recomienda usar un bucket distinto para almacenar archivos en una colección diferente, en lugar de usar un prefijo. El prefijo no debe comenzar con una barra invertida (/).

read-only

Si true, la escritura en el bucket GridFS está deshabilitada. Las operaciones de guardar devolverán false o arrojarán excepciones según la configuración de throw. Por defecto 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 puedes utilizar un factory 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,
]);
},
],
],

Laravel Filesystem proporciona una interfaz común para todos los sistemas de archivos compatibles. Puede 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 Laravel Almacenamiento de archivos, consulta Laravel Almacenamiento de archivos 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 GridFS Flysystem. Interactúa con las revisiones de archivos en las siguientes maneras:

  • Leer un archivo lee la última revisión de este nombre de archivo

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

  • Renombrar un archivo renombra todas las revisiones de este nombre de archivo.

  • Eliminar un archivo elimina todas las revisiones de ese 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