
本文详解 Firebase Storage 上传图片后因引用不一致导致 StorageException: Object does not exist at location(HTTP 404)错误的根本原因与修复方案,重点强调 putFile() 与 getDownloadUrl() 必须使用同一 StorageReference 实例。
本文详解 firebase storage 上传图片后因引用不一致导致 `storageexception: object does not exist at location`(http 404)错误的根本原因与修复方案,重点强调 `putfile()` 与 `getdownloadurl()` 必须使用**同一 storagereference 实例**。
在 Firebase Storage 中,getDownloadUrl() 并非“生成”URL,而是向服务端发起请求,查询指定路径下已存在对象的元数据并返回其公开访问链接。若该路径未成功上传文件(或引用路径不匹配),服务端将返回 404 错误——这正是你遇到 Code: -13010, HttpResult: 404 的根本原因。
你的原始代码中存在关键引用错位:
ref = FirebaseStorage.getInstance().getReference("photo");
// ❌ 上传时用了子路径
ref.child(postId+"-"+fmNumber).putFile(result) // → 实际上传到 "photo/{id}-{fm}"
// ❌ 但获取 URL 时却调用父引用
ref.getDownloadUrl() // → 尝试读取 "photo/" 目录本身(无文件,404!)
✅ 正确做法是:复用同一个 StorageReference 实例,确保上传与查询路径完全一致:
// ✅ 创建明确的文件引用(含完整路径)
StorageReference fileRef = ref.child(postId + "-" + fmNumber);
fileRef.putFile(result)
.addOnSuccessListener(taskSnapshot -> {
// ✅ 在 upload 成功回调中,用同一 fileRef 获取 URL
fileRef.getDownloadUrl().addOnSuccessListener(uri -> {
String downloadUrl = uri.toString();
System.out.println("Download URL: " + downloadUrl);
image = downloadUrl;
Toast.makeText(FromActivity.this, "Image Upload Successful", Toast.LENGTH_SHORT).show();
uploadComplete = true;
}).addOnFailureListener(exception -> {
// ⚠️ 注意:getDownloadUrl() 也可能失败(如权限不足、文件被删)
Log.e("FirebaseStorage", "Failed to get download URL", exception);
Toast.makeText(FromActivity.this, "Failed to retrieve image URL", Toast.LENGTH_LONG).show();
});
})
.addOnFailureListener(exception -> {
Log.e("FirebaseStorage", "Upload failed", exception);
Toast.makeText(FromActivity.this, "Image upload failed", Toast.LENGTH_LONG).show();
uploadComplete = false;
});
? 关键注意事项:
- getDownloadUrl() 是异步操作,必须在 putFile().addOnSuccessListener() 内部调用,确保文件已持久化;
- 不要依赖 taskSnapshot.getMetadata().getDownloadUrl()(已弃用且可能为 null),始终使用 fileRef.getDownloadUrl();
- 确保 Firebase Storage 安全规则允许读取对应路径(例如:allow read: if resource != null;);
- 生产环境建议添加超时控制与重试逻辑,并对 getDownloadUrl() 的失败场景做兜底处理(如显示占位图)。
通过统一引用、明确作用域、合理嵌套回调,即可彻底规避 404 错误,稳定获取可访问的图片 URL。











