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 inconfig/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 delocal-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 omgevingsvariabeleFILESYSTEM_DISK wissel je van standaarddisk.
De public-disk en symbolische links
Depublic-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.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
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 methodetemporaryUrl.
Deze is beschikbaar voor de drivers local en s3.
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
Zichtbaarheid van bestanden (visibility)
In Flysystem beheer je metvisibility of bestanden publiek of privé zijn.
storePublicly.
Meerdere disks gebruiken
Met dedisk-methode wissel je van disk.
Read-through-disks
Met eenread-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.
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
MetStorage::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.Storage::url().