Firebase Storage上传图片报错:Object does not exist at location(-13010/404)
Firebase Storage上传报错(Code: -13010 HttpResult: 404)排查
我尝试将图片上传至Firebase Storage,但始终出现如下错误:
E/StorageException: StorageException has occurred.
Object does not exist at location.
Code: -13010 HttpResult: 404
我的代码实现如下:
private final StorageReference storageRef = FirebaseStorage.getInstance().getReference("upload"); //uploading pic to firebase storage public void send(View view) { if (uri == null) return; StorageReference _storageRef = storageRef.child(System.currentTimeMillis() + "." + getExtension(uri)); _storageRef.putFile(uri) .addOnSuccessListener(taskSnapshot -> Toast.makeText(MainActivity.this, "success", Toast.LENGTH_SHORT).show()) .addOnFailureListener(e -> Toast.makeText(MainActivity.this, "fails", Toast.LENGTH_SHORT).show()); } private String getExtension(Uri uri) { if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) { ContentResolver cr = getContentResolver(); MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); return mimeTypeMap.getExtensionFromMimeType(cr.getType(uri)); } else { return MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new file(uri.getPath())).toString()); } }
错误信息再次确认:
E/StorageException: StorageException has occurred.
Object does not exist at location.
Code: -13010 HttpResult: 404
我的Firebase Storage规则为:
allow read, write: if true;
可能的原因及解决办法
1. 文件Uri无效或文件不存在
- 检查
uri是否指向本地存在的有效图片文件,在send方法中添加日志打印uri.toString(),确认路径正确,且文件未被删除、移动,同时确保App有读取该文件的权限。 - 如果是通过相册/相机获取的Uri,核对获取逻辑是否正确,比如相机拍照后的Uri是否正确保存,相册选择的文件是否授予了读取权限。
2. getExtension方法存在错误
- 代码中
new file(uri.getPath())是小写的file,Java类名需大写为File,修正为new File(uri.getPath()),避免编译或运行时错误。 - 针对
filescheme的Uri,MimeTypeMap.getFileExtensionFromUrl的可靠性较低,建议直接从文件名截取后缀:File file = new File(uri.getPath()); String fileName = file.getName(); int dotIndex = fileName.lastIndexOf("."); return dotIndex != -1 ? fileName.substring(dotIndex + 1) : ""; - 添加空值判断:
getContentResolver().getType(uri)可能返回null,导致getExtensionFromMimeType返回null,最终生成xxxx.null格式的文件名,建议在方法中处理这种情况,避免异常。
3. Firebase初始化或引用问题
- 确认
google-services.json文件已正确放置在项目中,包名与Firebase控制台配置一致。 - 可尝试直接使用根引用测试上传,排除路径问题:
private final StorageReference storageRef = FirebaseStorage.getInstance().getReference();
4. 网络异常
- 404错误可能由网络波动导致请求未达服务器或响应丢失,切换Wi-Fi/移动网络重试,确保设备网络连接正常。
5. 未获取详细异常信息
- 目前的失败监听仅提示"fails",建议打印完整异常信息定位问题:
.addOnFailureListener(e -> { e.printStackTrace(); Toast.makeText(MainActivity.this, "fails: " + e.getMessage(), Toast.LENGTH_SHORT).show(); });
内容的提问来源于stack exchange,提问作者raul g h
相关产品推荐
相关产品推荐

