# 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üssel - `filename`: Generierter Dateiname - `original_filename`: Originaler Upload-Dateiname - `mime_type`: MIME-Typ des Bildes - `file_size`: Dateigröße in Bytes - `width`: Bildbreite in Pixeln - `height`: Bildhöhe in Pixeln - `hash`: SHA256-Hash für Duplikat-Erkennung - `upload_path`: Relativer Pfad zum Bild - `created_at`: Erstellungszeitpunkt - `updated_at`: Letzter Aktualisierungszeitpunkt ### `image_variants` - `id`: Primärschlüssel - `image_id`: Fremdschlüssel zur `images`-Tabelle - `variant`: Name der Variante (thumbnail, small, medium, large) - `format`: Dateiformat (jpg, webp, avif) - `width`: Bildbreite in Pixeln - `height`: Bildhöhe in Pixeln - `file_size`: Dateigröße in Bytes - `filename`: Name der Variantendatei - `created_at`: Erstellungszeitpunkt ## Verwendung ### Bild hochladen ```php // 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 ```html Beschreibung ``` ## 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.