Skip to main content

Was ist der Dateispeicher?

Laravel bietet eine mächtige Abstraktionsebene über Dateisysteme, die auf dem PHP-Paket Flysystem basiert. Damit können Sie unterschiedliche Storage-Backends – lokale Disks, SFTP, Amazon S3 – über dieselbe API ansprechen. Zwischen Umgebungen umzuschalten erfordert keine Codeänderungen.
Ein Treiberwechsel erfordert keine Code-Anpassung. Eine typische Konfiguration – lokal in der Entwicklung, S3 in der Produktion – lässt sich problemlos umsetzen.

Konfiguration

Die Dateisystem-Einstellungen liegen zentral in config/filesystems.php. Dort definieren Sie „Disks”. Eine Disk ist die Kombination aus einem bestimmten Treiber und einem Speicherort. Die wichtigsten Treiber:

local-Treiber

Der Treiber local arbeitet relativ zum in der filesystems-Konfiguration angegebenen root-Verzeichnis. Standardmäßig entspricht root dem Pfad storage/app/private.

Standard-Disk ändern

Über die Umgebungsvariable FILESYSTEM_DISK schalten Sie die Standard-Disk um.
Die public-Disk ist für Dateien gedacht, die über den Webserver zugänglich sein sollen. Standardmäßig werden diese Dateien unter storage/app/public gespeichert. Damit der Webserver die Dateien ausliefern kann, legen Sie einen Symlink von public/storage nach storage/app/public an.
1

Symlink anlegen

2

Datei-URL erzeugen

Nach dem Anlegen des Symlinks können Sie URLs über den Helper asset erzeugen.
Zusätzliche Symlinks können Sie im Array links in config/filesystems.php konfigurieren.
Zum Entfernen eines Symlinks verwenden Sie storage:unlink.

Grundoperationen mit der Storage-Facade

Dateien lesen

Dateien schreiben

Schlägt put fehl, gibt es standardmäßig false zurück. Mit 'throw' => true in der Disk-Konfiguration können Sie Ausnahmen auslösen lassen.

Dateien löschen

Dateien als Download

URLs erzeugen

Reguläre URL

Für den local-Treiber ergibt das eine relative URL wie /storage/file.jpg. Für den s3-Treiber wird die vollständige Remote-URL zurückgegeben.

Temporäre URL

Für zeitlich begrenzte URLs nutzen Sie temporaryUrl. Unterstützt werden die Treiber local und s3.
Für S3 können Sie zusätzliche Request-Parameter angeben.
Für temporäre Upload-URLs verwenden Sie temporaryUploadUrl. Das eignet sich für serverlose Setups, in denen der Client direkt zu S3 hochlädt.

Datei-Uploads

Ein gängiges Muster: Formular-Uploads eines Nutzers speichern.

store (Dateiname automatisch)

storeAs (Dateiname angeben)

Upload auf einer bestimmten Disk

Upload über die Storage-Facade

getClientOriginalName() und getClientOriginalExtension() sind vom Nutzer beeinflussbar und daher nicht sicher. Nutzen Sie stattdessen hashName() für den Dateinamen und extension() für die Endung.

Sichtbarkeit (Visibility)

In Flysystem wird die Sichtbarkeit einer Datei über visibility gesteuert.
Um Uploads direkt öffentlich zu speichern, verwenden Sie storePublicly.

Mehrere Disks nutzen

Mit disk wechseln Sie zwischen den Zielen.

Cloud-Speicher (S3) konfigurieren

Paket installieren

Umgebungsvariablen setzen

Legen Sie die Zugangsdaten in Ihrer .env-Datei ab.
Auch S3-kompatible Dienste wie DigitalOcean Spaces, Cloudflare R2 oder Vultr Object Storage lassen sich mit dem s3-Treiber verwenden. Geben Sie in der Option endpoint die URL des Dienstes an.

Metadaten von Dateien abfragen

Verzeichnisoperationen

Testen

Mit Storage::fake() schreiben Sie Tests, ohne echte Dateien anzufassen.
Für UploadedFile::fake()->image() benötigen Sie die GD-Erweiterung von PHP.

Praxisbeispiel: Profilbild hochladen

Ein praxisnaher Controller, der Validierung, Speicherung und das Ablegen des Pfads in der Datenbank kombiniert.
Im Template erzeugen Sie die URL über Storage::url().
Zuletzt geändert am 13. Juli 2026