Skip to main content

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 è in config/filesystems.php, dove definisci i “disk”. Un disk è la combinazione di un driver e una destinazione. Driver principali:

Driver local

Usa root di filesystems. Di default storage/app/private.

Cambiare il disk predefinito

Con FILESYSTEM_DISK.
Il disk public è per file accessibili dal web. Di default salva in storage/app/public. Per renderli raggiungibili crea il symlink public/storagestorage/app/public.
1

Crea il symlink

2

Ottieni l'URL del file

Per symlink aggiuntivi configura links in config/filesystems.php.
Rimuovi il symlink con:

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

Con local è relativo (/storage/file.jpg), con s3 è l’URL completo.

URL temporaneo

Con temporaryUrl (disponibile per local e s3).
Su S3 puoi passare parametri aggiuntivi:
Per URL di upload temporaneo usa temporaryUploadUrl. Utile per upload client-side diretto verso S3.

Upload di file

store (nome file auto)

storeAs (nome specifico)

Con disk specifico

Via facade Storage

getClientOriginalName() e getClientOriginalExtension() sono manipolabili dall’utente: non sicuri. Usa hashName() ed extension().

Visibilità

In Flysystem la visibilità pubblica/privata si gestisce con visibility.
Per salvare pubblicamente file caricati usa storePublicly.

Più disk

Disco read-through

Il disco read-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.
Scritture e listing di directory sono indirizzati al disco primario. I controlli di esistenza dei file e le letture di metadati consultano entrambi i dischi, ma non copiano i file sul disco primario. Di default, se la copia dal disco di fallback al disco primario fallisce, la lettura stessa ha comunque successo. Per generare un’eccezione quando la copia fallisce, imposta 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

Directory

Test

Storage::fake() per test senza toccare disk reali.
UploadedFile::fake()->image() richiede l’estensione GD di PHP.

Esempio pratico: upload dell’avatar

Nel template:
Ultima modifica il 21 agosto 2026