Swift项目中Firebase Storage引用异常导致获取文件元数据失败如何解决
错误原因
child()方法仅用于拼接存储桶内部的层级路径,不支持传入带gs://协议的存储桶前缀。你将gs://my_bucket_name传入child()时,Firebase SDK会自动合并路径中的冗余斜杠,导致gs://变为gs:/,最终生成的路径无效,请求失败。
解决方法
根据你使用的存储桶类型选择对应方案:
- 若访问的是当前App绑定的默认存储桶(即
GoogleService-Info.plist中配置的存储桶为my_bucket_name),无需额外指定桶名,直接拼接桶内文件路径即可:
let ref = Storage.storage().reference() let txt_ref = ref.child("story_001.txt") print(txt_ref.fullPath) txt_ref.getMetadata{ metadata, error in if let err = error { print("Failed to get metadata.") } else{ print("Metadata: \(metadata)") } }
- 若访问的是非默认的自定义存储桶,使用
reference(forURL:)方法初始化引用,不要通过child()传递gs协议前缀:
// 方案1:先指定目标存储桶,再拼接文件路径 let ref = Storage.storage().reference(forURL: "gs://my_bucket_name") let txt_ref = ref.child("story_001.txt") // 方案2:直接传入完整的文件gs链接生成引用 let txt_ref = Storage.storage().reference(forURL: "gs://my_bucket_name/story_001.txt")
内容的提问来源于stack exchange,提问作者mczmma
相关产品推荐
相关产品推荐

