Troubleshooting
Common issues and their fixes.
Multipart upload returns 403
Symptom: A large file upload fails with Request failed with status code 403 partway
through.
-
Cause 1 —
PRESIGNED_URL_BASEnot set. The URL was signed againstminio:9000(internal) but the browser callslocalhost:9000(external), so the signature doesn't match.Fix: Set
PRESIGNED_URL_BASEto the externally-reachable URL. See Uploading Objects. -
Cause 2 — CORS not configured on storage. The browser preflight is rejected.
Fix:
MINIO_API_CORS_ALLOW_ORIGIN(MinIO) or a bucket CORS policy (S3). See CORS Setup.
Multipart upload completes but the file is corrupt
Cause: The frontend couldn't read ETag headers from part responses (CORS not
exposing them), so it sent placeholders.
Fix: Ensure your CORS config has ExposeHeaders: ["ETag"]. See CORS Setup.
Audit log page is empty
Cause: The audit_logs table wasn't migrated.
Fix:
# Docker Compose
docker compose -f docker-compose.dev.yml exec backend alembic upgrade head
# Kubernetes
kubectl exec -it deploy/s3bear-backend -- alembic upgrade head
Copy / Move returns 403
Cause: Missing source read (and, for move, delete) or destination write
permission.
Fix: Check the user's effective permissions in Groups — both the source and destination patterns must match a group the user belongs to. See Group Permissions.
Image preview / share link returns 415
Cause: The object isn't a recognized image MIME type — the image proxy is allow-listed by content-type.
Fix: This is intentional; the image proxy isn't a generic file server. For non-images, use public share links instead.
"User not approved" after Entra login
Cause: A first-time SSO user, but auto_create_users is false (the default).
Fix: Either flip auto_create_users to true in Settings, or pre-import the user
via Entra User Import.
Related: Uploading Objects · CORS Setup · Configuration
