chore: complete update

This commit is contained in:
2025-07-17 16:24:20 +02:00
parent 899227b0a4
commit 64a7051137
1300 changed files with 85570 additions and 2756 deletions

128
README-image-upload.md Normal file
View File

@@ -0,0 +1,128 @@
# 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
<!-- 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.