¿Qué es el almacenamiento de archivos?
Laravel ofrece una potente capa de abstracción del sistema de archivos basada en el paquete PHP Flysystem. Puedes manipular con la misma API distintos backends de almacenamiento (disco local, SFTP, Amazon S3…), por lo que no necesitas cambiar el código al pasar de uno a otro según el entorno.Al cambiar de driver, el código no cambia. Puedes usar el disco local en desarrollo y S3 en producción con configuración muy simple.
Configuración
La configuración del sistema de archivos se centraliza enconfig/filesystems.php.
Ahí defines los “discos”. Un disco es la combinación de un driver y una ubicación de almacenamiento.
Los drivers principales son:
Driver local
Con el driverlocal, las operaciones se realizan tomando como base la ruta root de la configuración filesystems.
Por defecto, root es storage/app/private.
Cambiar el disco por defecto
Cambia el disco por defecto con la variableFILESYSTEM_DISK.
Disco public y enlaces simbólicos
El discopublic sirve para almacenar archivos accesibles desde la web.
Por defecto se guardan en el directorio storage/app/public.
Para que sean accesibles desde el servidor web, crea un enlace simbólico de public/storage a storage/app/public.
1
Crear el enlace simbólico
2
Obtener la URL del archivo
Tras crear el enlace, puedes generar la URL con el helper
asset.storage:unlink.
Operaciones básicas con la fachada Storage
Leer archivos
Escribir archivos
Si
put falla devuelve false por defecto.
Con 'throw' => true en la configuración del disco puedes hacer que lance excepciones.Eliminar archivos
Respuesta de descarga
Generación de URLs
URL normal
local devuelve una URL relativa como /storage/file.jpg.
Con s3 devuelve la URL remota completa.
URLs temporales
Para generar URLs con caducidad usatemporaryUrl.
Disponible en los drivers local y s3.
Subida de archivos
Patrón habitual para guardar un archivo enviado por un formulario.store (genera nombre automáticamente)
storeAs (nombre explícito)
Subir a un disco concreto
Subir con la fachada Storage
Visibilidad de los archivos
En Flysystem, la privacidad se gestiona convisibility.
storePublicly.
Uso de varios discos
Cambia de disco condisk.
Configuración del almacenamiento en la nube (S3)
Instalación del paquete
Variables de entorno
Configura las credenciales de S3 en.env.
Servicios compatibles con S3 como DigitalOcean Spaces, Cloudflare R2 o Vultr Object Storage también funcionan con el driver
s3.
Indica su endpoint en la opción endpoint.Metadatos del archivo
Operaciones con directorios
Pruebas
ConStorage::fake() puedes probar operaciones de archivo sin tocar el disco real.
Para usar
UploadedFile::fake()->image() necesitas la extensión GD de PHP.Caso práctico: subida de una imagen de perfil
Ejemplo de un controlador que combina validación, guardado y registro de la ruta en la BD.Storage::url() para obtener la URL.