Cloud-Agnostic File Storage Microservice
A Spring Boot file storage service with presigned uploads, backend fallback, demo-tenant onboarding, and zero-code provider switching.
The core idea is keeping storage concerns behind a clean `StorageProvider` abstraction so the app can move between Cloudflare R2 and AWS S3 without touching business logic. On top of that, the service handles tenant-scoped metadata in PostgreSQL, public demo tenant creation for frontend testing, and a practical upload flow that prefers direct browser-to-storage transfer but still has a backend multipart fallback when needed.
- Uses presigned URLs so files usually upload directly to object storage instead of passing through the backend.
- Includes a backend multipart fallback path for demo and recovery scenarios when direct browser upload is blocked.
- Creates demo tenants through a public endpoint so a frontend can bootstrap itself and store an API key locally for testing.
- Tracks tenant-scoped metadata, upload state, and aggregate usage metrics in PostgreSQL while keeping provider switching environment-driven.