Object storage for Sova — local disk, memory, S3/R2/MinIO, GCS, Azure.
Upload pipeline:
file.validate(&UploadRules::new().max_bytes(2_000_000).extensions(["png", "jpg"]))?;
let stored = req.storage().store(&file, "avatars").await?;
// stored.key / stored.url