使用示例代码向Firestore上传文件返回404错误(Code=-13010)
问题原因及解决方案
核心问题1:混淆Firebase Storage与Firestore的规则配置
你上传文件用的是Firebase Storage服务,但配置的却是**Firestore(云数据库)**的规则——这两个是Firebase完全独立的服务,规则不通用。当前Storage的默认规则大概率是拒绝所有操作,导致上传请求被拦截,返回的404是权限异常的表现形式。
核心问题2:上传了空数据
代码中let data = Data()是一个空的二进制数据对象,虽然官方示例是占位用,但空数据上传可能触发Storage的异常校验,干扰正常上传流程。
额外问题:Firestore规则过期
你配置的Firestore规则限定了request.time < timestamp.date(2023, 5, 24),这个时间早已过期,但这只影响Firestore数据库的读写,和文件上传无关。
解决步骤
配置正确的Firebase Storage规则
进入Firebase控制台,找到Storage服务的规则页面,替换为正确的Storage规则(示例规则,可根据需求调整权限):rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; // 仅允许已认证用户读写 // 或临时测试用:allow read, write: if true;(上线前务必修改) } } }上传有效数据
将空的Data()替换为实际要上传的文件数据,比如从本地文件读取:// 示例:从本地文件读取数据 guard let fileURL = Bundle.main.url(forResource: "rivers", withExtension: "jpg") else { return } guard let data = try? Data(contentsOf: fileURL) else { return }更新Firestore规则(可选)
如果需要正常使用Firestore数据库,更新规则的时间限制,或调整为符合业务需求的权限配置。
内容的提问来源于stack exchange,提问作者schmittsfn
相关产品推荐
相关产品推荐

