src/Core/Upload/Upload.php. Je to thin wrapper nad PHP move_uploaded_file() s validací a metadaty v DB.
Konfigurace
Vconfig/app.json:
Validace
Uložení
user_id— vlastník (i pro frakce — uploaduje uživatel, ne frakce sama).uuid— UUID v4 jako filename (žádné zachování originálu).ext— z původního souboru (validovaný).
Tabulka user_uploads
| Sloupec | Význam |
|---|---|
id | UUID (= filename bez ext) |
user_id | Vlastník |
purpose | viz Enumy / UploadPurpose |
type | images / anthems |
path | absolutní cesta na disku |
public_url | URL pro web |
size | bytes |
created_at | datetime |
Upload::delete($uploadId) ho mazat musí explicitně. Důvod: kdybychom mazali při kaskádě, ztratili bychom obrázky, které jsou ještě někde reference (např. původní avatar).
Public URL
https://dayzero.cz/portal/uploads/user/8b8f.../9c9f....jpg.
Akcept HTTP
Pro upload se používámultipart/form-data request. Endpoint dle účelu:
| Účel | Endpoint |
|---|---|
| Avatar / banner | PUT /api/v1/user/me (s multipart) |
| Gallery | POST /api/v1/user/:user_id/gallery |
| Anthem | POST /api/v1/user/me/anthem |
| Faction avatar / cover | inline při PUT/POST faction |
| Journal thumbnail | inline při POST journal |
Bezpečnost
- Žádné PHP nebo
.htaccessv upload directory (chrání.htaccessv root uploads). - MIME se ověří, nejen extension.
- Image library nečte obsah — žádný resize, žádný EXIF strip (zatím).
- Pro audio se neprovádí re-encode; očekává se OGG Vorbis.
Plánovaná zlepšení
- Auto-resize obrázků (avatar 512×512, banner 1920×480)
- EXIF strip pro privacy (geotagy)
- WebP variants pro úsporu šířky pásma