Short answer
Log the full path you pass to ref(), then find that file in the Firebase console under Storage, matching case and extension. Check that the app uses the bucket and project you expect, and that you save the path only after the upload finishes. When a file is optional, such as an avatar, catch the error and show a placeholder.
Rather not fix it yourself? App Fix Ticket starts with a fixed-price diagnosis, then a fixed price for the fix before any fix work.
Why the file isn’t there, and the fix
01
The path doesn’t match the file
“No object exists at the specified reference.” Firebase, Handle errors (storage/object-not-found)
Paths must match exactly, including case, folders and the file extension. avatars/abc.jpg and avatars/ABC.jpeg are different files.
02
The app reads from another bucket or project
A web config copied from another project, a second bucket, or the emulator in one place and production in another all look like missing files. Compare storageBucket in the config with the bucket you see in the console, including the domain: newer buckets end in .firebasestorage.app, older ones in .appspot.com.
03
The path was saved before the upload finished
If you write the path to Firestore when the upload starts, a failed or cancelled upload leaves a path with no file. Save it after the upload resolves, and read the download URL then.
04
Optional files need a fallback
Not every user has an avatar or attachment. Catch this one error and show a default, and let other errors surface. In Flutter the same error shows as firebase_storage/object-not-found.
import { FirebaseError } from 'firebase/app'; import { getStorage, ref, getDownloadURL } from 'firebase/storage'; try { const url = await getDownloadURL(ref(getStorage(), `avatars/${uid}.jpg`)); showImage(url); } catch (e) { if ((e as FirebaseError).code === 'storage/object-not-found') showPlaceholder(); else throw e; }05
A different error means a different fix
“No bucket is configured for Cloud Storage” Firebase, Handle errors (storage/bucket-not-found)
storage/unauthorized means rules blocked the read, so the file may exist. storage/bucket-not-found means the bucket in the config doesn’t exist.
Checked against the vendor’s docs on : Firebase docs: Handle errors for Cloud Storage on Web; Firebase docs: Download files with Cloud Storage on Web.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.See scope and start
“Very responsive, attentive to fixing bugs, and completed the project as needed! Thank you!”
Related: Firebase Storage unauthorized · Firebase “Missing or insufficient permissions” · Firebase Hosting “Page Not Found” · Firebase storage/retry-limit-exceeded