Skip to main content

Wat is bestandsopslag

Laravel biedt een krachtige abstractielaag voor bestandssystemen, gebaseerd op de PHP-package Flysystem. Omdat je verschillende opslagbackends zoals lokale schijven, SFTP en Amazon S3 met dezelfde API bedient, kun je per omgeving wisselen zonder je code aan te passen.
Ook als je van driver wisselt, blijft je code hetzelfde. Een opzet met lokale opslag in ontwikkeling en S3 in productie is zo eenvoudig te realiseren.

Configuratie

De configuratie van het bestandssysteem staat in config/filesystems.php. Hier definieer je “disks”. Een disk is een combinatie van een specifieke driver en een opslaglocatie. De belangrijkste drivers zijn:

De local-driver

Met de local-driver werk je met bestanden relatief aan de root-directory uit de filesystems-configuratie. Standaard is storage/app/private de root.

De standaarddisk wijzigen

Met de omgevingsvariabele FILESYSTEM_DISK wissel je van standaarddisk.
De public-disk is bedoeld voor bestanden die via het web toegankelijk moeten zijn. Standaard worden ze opgeslagen in de directory storage/app/public. Om ze toegankelijk te maken vanaf de webserver, maak je een symbolische link van public/storage naar storage/app/public.
1

De symbolische link maken

2

De URL van een bestand opvragen

Na het maken van de symbolische link kun je met de asset-helper een URL genereren.
Heb je extra symbolische links nodig, dan kun je die instellen in de links-array van config/filesystems.php.
Symbolische links verwijder je met storage:unlink.

Basisbewerkingen met de Storage-facade

Bestanden lezen

Bestanden schrijven

Als put mislukt, geeft de methode standaard false terug. Door in de diskconfiguratie 'throw' => true in te stellen, kun je in plaats daarvan een exception laten gooien.

Bestanden verwijderen

Een downloadresponse voor bestanden

URL’s genereren

Reguliere URL’s

De local-driver geeft een relatieve URL terug, zoals /storage/file.jpg. De s3-driver geeft een volledige remote URL terug.

Tijdelijke URL’s (temporary URL)

Wil je een URL met een vervaldatum genereren, gebruik dan de methode temporaryUrl. Deze is beschikbaar voor de drivers local en s3.
Bij S3 kun je ook extra requestparameters opgeven.
Heb je een tijdelijke upload-URL nodig, gebruik dan de methode temporaryUploadUrl. Handig in serverless-opstellingen waarbij de client rechtstreeks naar S3 uploadt.

Bestanden uploaden

Een veelvoorkomend patroon voor het opslaan van bestanden die gebruikers via een formulier uploaden.

De store-methode (bestandsnaam automatisch genereren)

De storeAs-methode (bestandsnaam opgeven)

Uploaden naar een specifieke disk

Uploaden via de Storage-facade

getClientOriginalName() en getClientOriginalExtension() zijn onveilig omdat gebruikers ze kunnen manipuleren. Gebruik hashName() voor de bestandsnaam en extension() voor de extensie.

Zichtbaarheid van bestanden (visibility)

In Flysystem beheer je met visibility of bestanden publiek of privé zijn.
Wil je een geüpload bestand publiek opslaan, gebruik dan storePublicly.

Meerdere disks gebruiken

Met de disk-methode wissel je van disk.

Read-through-disks

Met een read-through-disk kun je bestanden zonder downtime naar een andere disk migreren. Bij het lezen van een bestand wordt eerst de primaire disk gecontroleerd; bestaat het daar niet, dan wordt het van de fallback-disk gelezen en naar de primaire disk gekopieerd voor volgende requests.
Schrijfbewerkingen en het opvragen van directorylijsten gebeuren op de primaire disk. Bij het controleren van bestandsbestaan en het opvragen van metadata worden beide disks geraadpleegd, maar wordt het bestand niet naar de primaire disk gekopieerd. Mislukt het kopiëren van de fallback-disk naar de primaire disk, dan slaagt de leesbewerking zelf standaard alsnog. Wil je bij een mislukte kopie een exception laten gooien, stel dan throw_on_promotion_failure in op true.

Cloudopslag (S3) configureren

De package installeren

Omgevingsvariabelen instellen

Zet de S3-inloggegevens in het .env-bestand.
S3-compatibele diensten zoals DigitalOcean Spaces, Cloudflare R2 en Vultr Object Storage werken ook met de s3-driver. Geef de endpoint-URL van de dienst op in de optie endpoint.

Bestandsmetadata opvragen

Welke waarde de path-methode teruggeeft, verschilt per driver. Bij de local-driver krijg je het absolute pad van het bestand, bij de s3-driver het relatieve pad binnen de S3-bucket.

Directorybewerkingen

Testen

Met Storage::fake() schrijf je tests voor bestandsbewerkingen zonder een echte disk aan te raken.
Voor UploadedFile::fake()->image() heb je de GD-extensie van PHP nodig.

Praktische use case: een profielfoto uploaden

Een praktisch controllervoorbeeld dat validatie, opslag en het vastleggen van het pad in de database combineert.
In je template haal je de URL op met Storage::url().
Laatst gewijzigd op 6 september 2026

Gerelateerde onderwerpen

MongoDBLogging