docs
/
EventOxygen

Media storage

Where event photos, cover images and attendees' own uploads live, how signed URLs work, and the limits worth knowing.

Three kinds of media reach the app, and they are stored differently.

MediaStored underRead through
Event media (organizer photos, gallery)event/<event.name>/files/ in the organization's object storageGET /client/events/:eventId/media
Guest media (photos of one guest)event/<event.name>/files/ keyed by guestGET /client/events/:eventId/media/guest/:guestId
Attendee uploads (post images, avatar, media library)The uploader's own spaceGET /client/community/media/mine

event.name is the slug, so the storage path is stable even when the event is edited. Renaming the slug orphans the folder.

Event media and signed URLs

The gallery endpoint lists the folder and returns signed URLs when asked (?signed=true), which is what the app requests. A signed URL expires; the app fetches the list when the gallery opens rather than caching links, so an expired link only shows up if you copy one out of the app.

Sharing photos with a guest (POST /events/:eventId/media/share, staff side) emails and texts signed links using the event-media-share templates.

Cover images

coverImage and images[] on the event are plain URLs in the record. Two patterns are in use:

  • A permanent URL (a CDN or a public bucket object). Loads immediately and never expires.
  • A signed object-storage URL. Works until it expires, and a large PNG behind it shows as a blank card until the whole file has arrived.
Keep covers small and permanent

A cover well under a megabyte on a permanent URL renders on the My Events list at once. The demo event's multi-megabyte signed PNG is the reason its card sometimes appears blank for a few seconds.

Attendee uploads

The attendee app's media manager picks from the camera, the device or the person's library and uploads through POST /client/community/media/upload in 64 KB multipart chunks with a progress indicator and a two-minute timeout. Images default to quality 80; videos are capped at five minutes.

OperationRoute
UploadPOST /client/community/media/upload
List mineGET /client/community/media/mine?signed=true
RenamePUT /client/community/media/rename
DeleteDELETE /client/community/media/:path

Uploaded files are referenced by URL from posts and messages. A chat photo is sent as a message whose body is the uploaded URL, so deleting the file from the library later breaks that message's preview.

Thumbnails are not trusted

The server produces xs, sm and md thumbnails, but their paths can be truncated, so the app uses the full-size signed URL for display. Expect full-size loads in the media library.

Practical limits

  • Maximum request body is set by the API; very large videos should be shared by link.
  • Signed URLs are per request; do not persist them in your own systems.
  • Deleting a file is immediate and not reversible.