3.8 KiB
3.8 KiB
Bild-Upload-System
Dieses Dokument beschreibt das Bild-Upload-System des Frameworks.
Funktionen
- Strukturierte Ordnerhierarchie basierend auf Datum und ID
- Automatische Erstellung mehrerer Bildvarianten (Größen)
- Unterstützung für mehrere Dateiformate (JPG, WebP, AVIF)
- Duplikat-Erkennung über SHA256-Hash
- Sicherheitsvalidierung von Dateitypen und -größen
- Performance-Optimierung durch moderne Bildformate
Ordnerstruktur
Die Bilder werden in folgendem Muster gespeichert:
/uploads
└─ /YYYY (Jahr)
└─ /MM (Monat)
└─ /DD (Tag)
└─ /XXX (ID Teil 1)
└─ /XXX (ID Teil 2)
└─ /XXX (ID Teil 3)
└─ original.jpg
└─ thumbnail.jpg
└─ thumbnail.webp
└─ thumbnail.avif
└─ small.jpg
└─ small.webp
└─ small.avif
└─ medium.jpg
└─ medium.webp
└─ medium.avif
└─ large.jpg
└─ large.webp
└─ large.avif
Bildvarianten
Folgende Bildvarianten werden automatisch erstellt:
- thumbnail: 150x150px, quadratisch zugeschnitten
- small: 400x400px, proportional skaliert
- medium: 800x800px, proportional skaliert
- large: 1200x1200px, proportional skaliert
Dateiformate
Jede Variante wird in folgenden Formaten gespeichert:
- JPG: Für universelle Kompatibilität
- WebP: Für moderne Browser mit besserer Kompression
- AVIF: Für neueste Browser mit bester Kompression (falls PHP-Unterstützung vorhanden)
Datenbank-Schema
Das System verwendet zwei Tabellen:
images
id: Primärschlüsselfilename: Generierter Dateinameoriginal_filename: Originaler Upload-Dateinamemime_type: MIME-Typ des Bildesfile_size: Dateigröße in Byteswidth: Bildbreite in Pixelnheight: Bildhöhe in Pixelnhash: SHA256-Hash für Duplikat-Erkennungupload_path: Relativer Pfad zum Bildcreated_at: Erstellungszeitpunktupdated_at: Letzter Aktualisierungszeitpunkt
image_variants
id: Primärschlüsselimage_id: Fremdschlüssel zurimages-Tabellevariant: Name der Variante (thumbnail, small, medium, large)format: Dateiformat (jpg, webp, avif)width: Bildbreite in Pixelnheight: Bildhöhe in Pixelnfile_size: Dateigröße in Bytesfilename: Name der Variantendateicreated_at: Erstellungszeitpunkt
Verwendung
Bild hochladen
// In einem Controller
public function upload(Request $request)
{
$file = $request->files->get('image');
$image = $this->imageService->uploadImage($file);
// URL zu einer Bildvariante erhalten
$thumbnailUrl = $this->imageService->getImageUrl($image, 'thumbnail', 'webp');
$mediumUrl = $this->imageService->getImageUrl($image, 'medium', 'jpg');
}
Bild anzeigen
<!-- Optimale Bildauswahl mit picture-Element -->
<picture>
<source srcset="/media/uploads/2025/06/26/001/234/567/1234567/medium.avif" type="image/avif">
<source srcset="/media/uploads/2025/06/26/001/234/567/1234567/medium.webp" type="image/webp">
<img src="/media/uploads/2025/06/26/001/234/567/1234567/medium.jpg" alt="Beschreibung">
</picture>
Technische Details
Bildverarbeitung
Die Bildverarbeitung erfolgt mit der GD-Bibliothek. Für die Verwendung von AVIF ist PHP 8.1+ mit AVIF-Unterstützung erforderlich.
Performance
Bilder werden mit Cache-Headers ausgeliefert, die eine lange Browser-Cache-Dauer ermöglichen, um Bandbreite zu sparen und die Ladezeit zu verbessern.
Sicherheit
Alle Uploads werden validiert, um sicherzustellen, dass nur erlaubte Bildtypen verarbeitet werden. Es werden sichere, eindeutige Dateinamen generiert, um Konflikte zu vermeiden.