Firebase图片上传失败求助:出现StorageException -13010(404)错误
看起来你遇到的这个错误(Code: -13010,HttpResult: 404,服务器终止上传会话)有点迷惑人——虽然提示“对象不存在”,但实际问题往往出在路径配置、文件访问、身份验证或者SDK本身的问题上。我整理了几个常见的排查和解决方向,你可以逐一试试:
检查Storage引用的路径是否正确
很多时候路径的小错误会导致这类问题:比如路径开头多了斜杠(比如写成/images/photo.jpg,正确的应该是images/photo.jpg,因为child()方法会自动处理路径分隔);或者路径里包含了Firebase不支持的特殊字符(虽然大部分字符都允许,但像#、$这类如果没转义可能有问题)。建议用时间戳或者随机字符串作为文件名,避免重复和特殊字符问题。确认你能正常读取要上传的图片文件
选择图片后,要确保你的App有读取该文件的权限:- 如果是Android 6.0+,有没有动态申请
READ_EXTERNAL_STORAGE权限? - 如果是Android 10+,是不是用了MediaStore API获取文件Uri,而不是直接访问文件路径?直接路径访问在Android 10+会被限制,导致文件无法读取,进而上传会话被终止。
- 如果是Android 6.0+,有没有动态申请
验证匿名登录是否真的完成
虽然你设置了允许匿名登录,但要确保代码里已经完成了匿名登录流程,并且在登录成功后再执行上传操作。Firebase Storage即使权限设为公开,有些情况下也需要有效的用户会话(哪怕是匿名的)才能建立上传连接。你可以在上传前加上匿名登录的代码,确保登录成功后再触发上传。检查Firebase Storage规则的配置
确认你的规则确实是公开读写的,配置应该是这样的:rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if true; } } }注意规则的语法是否正确,有没有少写括号或者匹配错误,配置后要记得发布规则。
更新Firebase SDK到最新版本
旧版本的Firebase Storage SDK可能存在上传会话终止的已知bug,更新到最新版本通常能解决这类兼容性问题。你可以在项目的build.gradle里把Firebase相关依赖的版本升级到最新稳定版。
另外,给你一个简单的上传示例代码(Android Kotlin),可以参考下正确的流程:
// 先完成匿名登录 FirebaseAuth.getInstance().signInAnonymously() .addOnCompleteListener { authTask -> if (authTask.isSuccessful) { // 假设这里是你从相册选择后获取的图片Uri val imageUri = ... // 创建Storage引用,用时间戳做文件名避免重复 val storageRef = FirebaseStorage.getInstance() .reference .child("uploaded_images/${System.currentTimeMillis()}.jpg") // 开始上传 storageRef.putFile(imageUri) .addOnSuccessListener { Log.d("StorageUpload", "图片上传成功!") // 这里可以获取下载链接等操作 } .addOnFailureListener { exception -> Log.e("StorageUpload", "上传失败", exception) } } else { Log.e("AuthError", "匿名登录失败", authTask.exception) } }
内容的提问来源于stack exchange,提问作者PeterZwegard

