Cos’è il file storage
Laravel fornisce un potente livello di astrazione basato sul pacchetto PHP Flysystem. Disco locale, SFTP, Amazon S3 e altri backend si usano con la stessa API: puoi cambiare ambiente senza modificare il codice.Cambiando driver, il codice resta lo stesso. In sviluppo storage locale, in produzione S3: passaggio semplice.
Configurazione
La configurazione è inconfig/filesystems.php, dove definisci i “disk”. Un disk è la combinazione di un driver e una destinazione.
Driver principali:
Driver local
Usaroot di filesystems. Di default storage/app/private.
Cambiare il disk predefinito
ConFILESYSTEM_DISK.
Disk public e symlink
Il disk public è per file accessibili dal web. Di default salva in storage/app/public.
Per renderli raggiungibili crea il symlink public/storage → storage/app/public.
1
Crea il symlink
2
Ottieni l'URL del file
Operazioni base con la facade Storage
Lettura
Scrittura
Se
put fallisce restituisce false di default. Configura 'throw' => true per lanciare un’eccezione.Eliminazione
Download
URL
URL normale
local è relativo (/storage/file.jpg), con s3 è l’URL completo.
URL temporaneo
ContemporaryUrl (disponibile per local e s3).
Upload di file
store (nome file auto)
storeAs (nome specifico)
Con disk specifico
Via facade Storage
Visibilità
In Flysystem la visibilità pubblica/privata si gestisce convisibility.
storePublicly.
Più disk
Disco read-through
Il discoread-through permette di migrare i file su un altro disco senza downtime. Quando legge un file, verifica prima il disco primario; se il file non è presente, lo legge dal disco di fallback e lo copia sul disco primario per le richieste successive.
throw_on_promotion_failure a true.
Storage cloud (S3)
Installazione
Variabili d’ambiente
Anche servizi S3-compatibili (DigitalOcean Spaces, Cloudflare R2, Vultr Object Storage) usano il driver
s3. Imposta endpoint con l’URL del servizio.Metadata
Il valore restituito dal metodo
path dipende dal driver. Il driver local restituisce il percorso assoluto del file, mentre il driver s3 restituisce il percorso relativo all’interno del bucket S3.Directory
Test
Storage::fake() per test senza toccare disk reali.
UploadedFile::fake()->image() richiede l’estensione GD di PHP.