Supabase Storage Upload Failed

Workaround available Web, server (all SDKs) Updated October 21, 2026

Quick answer

Most upload failures are a missing INSERT policy on storage.objects, a file larger than the bucket limit (413), or an invalid key/MIME type (400).

Most likely fix: Add a storage policy.

Symptoms

Upload returns 'new row violates row-level security policy', 'Payload too large' (413), InvalidKey or InvalidMimeType (400).

Why it happens

  • No INSERT policy on storage.objects for the bucket
  • upsert: true without an UPDATE policy
  • File exceeds bucket or global size limit
  • Object path contains invalid characters
  • MIME type not allowed by the bucket

How to fix it

Try these in order — the most common fix is first.

  1. 1. Add a storage policy

    1. Dashboard > Storage > Policies
    2. Create an INSERT policy on storage.objects scoped to your bucket_id
    3. Add UPDATE and SELECT policies if you use upsert
  2. 2. Raise the file size limit

    1. Storage > select bucket > Edit bucket
    2. Set the maximum file size; for large files use resumable (TUS) uploads
  3. 3. Clean the object key

    1. Remove special characters and spaces from the file path
    2. Pass bucket name and path in the correct arguments
  4. 4. Set a valid contentType

    1. Pass contentType (e.g. image/jpeg) in the upload options
    2. Make sure it's in the bucket's allowed MIME types

This guide also covers

  • supabase storage upload failed
  • supabase storage rls policy
  • supabase payload too large
  • supabase storage invalid key

Still not working?

If Supabase keeps failing, you're not alone. See every Supabase problem users report or the alternatives people switch to.

Other Supabase errors