Swift调用listAll列举存储桶根目录时触发Expected gs://...子元素错误
Firebase云存储iOS端listAll根目录崩溃问题解决
异常原因
这个异常是Firebase iOS Storage SDK 8.0.0到8.2.0版本的已知bug,根目录路径的父子关系校验逻辑写反,导致判断根目录下子文件的所属关系时,错误要求父级根路径是子文件的子元素,触发内部一致性异常。列举子目录时不会触发该错误逻辑,所以运行正常。
修复方案
- 方案1:升级SDK版本
将Firebase Storage SDK升级至8.3.0及以上版本,官方已在该版本修复根路径解析逻辑,升级后原有代码无需修改即可正常运行。 - 方案2:临时兼容方案(暂无法升级SDK时使用)
不使用root()方法获取根引用,改为传入空字符串生成根引用即可避开bug,修改后的代码如下:
// 替换root()调用,使用空路径获取根存储引用 let storageReference = Storage.storage().reference("") // 列举所有条目 storageReference.listAll { (result, error) in if let error = error { print(error.localizedDescription) return } // 遍历输出所有文件名称 for item in result.items { print(item.name) } }
注意事项
如果存储桶内文件数量较多,不要使用listAll拉取全量数据,容易触发接口限流或者内存占用过高,建议使用list(maxResults:)配合分页token做分页拉取。
内容的提问来源于stack exchange,提问作者MaxBrt18
相关产品推荐
相关产品推荐

