Skip to main content

Media

Bellamy Book uses a Media layer for user and content assets: avatars, wallpapers (cover images), story media, and blog images/files. Media files are stored in MinIO or Cloudflare R2 (switchable via Storage:Provider config — see Storage Configuration). The API exposes upload endpoints and URLs for reading; MediaProcessingWorker (Kafka) can process uploads (e.g. thumbnails, transcoding) asynchronously.


Overview

  • Uploads: User avatar, user wallpaper, user video, story media; default avatar and default wallpaper (admin). Blog images/files are handled via api/Blog (upload-image, upload-file, featured image).
  • API: api/media — upload (avatar, wallpaper, video, story; default avatar/wallpaper); get by ID, by user, default URLs; get processing status. api/media/performance — stats and errors (admin/monitoring).
  • Storage: MinIO or Cloudflare R2 buckets (public, temp, files, support, backups). Temp files are cleaned by TempFileCleanupJob (see Scheduled Jobs). See Storage Configuration for setup.

API Endpoints

Uploads (api/media)

MethodEndpointDescription
POST/api/media/avatar/{userId}Upload user avatar
POST/api/media/wallpaper/{userId}Upload user cover/wallpaper
POST/api/media/video/{userId}Upload user video
POST/api/media/story/{userId}Upload story media
POST/api/media/default/avatarUpload default avatar (admin)
POST/api/media/default/wallpaperUpload default wallpaper (admin)

Read (api/media)

MethodEndpointDescription
GET/api/media/avatar/{userId}Get user avatar URL
GET/api/media/wallpaper/{userId}Get user wallpaper URL
GET/api/media/{mediaFileId}Get media file by ID
GET/api/media/{mediaFileId}/statusGet processing status
GET/api/media/user/{userId}Get media files for user
GET/api/media/default/avatarGet default avatar URL
GET/api/media/default/wallpaperGet default wallpaper URL

Performance (api/media/performance) — Admin/Monitoring

MethodEndpointDescription
GET/api/media/performance/statsAggregate media stats
GET/api/media/performance/errorsProcessing errors
GET/api/media/performance/stats/by-typeStats by media type

Processing

  • MediaProcessingWorker (Kafka) consumes media events and can generate thumbnails, transcode video, etc. Processed URLs are stored and returned by the read endpoints.
  • TempFileCleanupJob (Quartz) deletes files in the temp bucket older than 24 hours.