Unity中如何正确检测Firebase Storage中的文件是否存在?
问题根因
你当前的写法存在逻辑错误:GetReferenceFromUrl 仅会在本地构造对应路径的存储引用对象,不会发起任何云端请求校验文件是否真实存在。只要你传入的存储路径格式合法,返回的引用对象永远不为null,所以无法用来判断文件是否存在。
正确实现方案
Firebase Storage 校验文件存在的标准实现是尝试获取目标文件的元数据,根据请求返回结果判断,示例代码如下:
// 先构造本地存储路径引用 StorageReference fileRef = storage.GetReferenceFromUrl($"gs://xxxxx-xxxxx-342352503.appspot.com/{fUser.UserId}"); // 异步请求云端元数据判断文件状态 fileRef.GetMetadataAsync().ContinueWith(task => { if (task.IsFaulted) { var storageError = task.Exception?.GetBaseException() as StorageException; // 错误码为ObjectNotFound代表文件确实不存在 if (storageError != null && storageError.ErrorCode == StorageErrorCode.ObjectNotFound) { Debug.Log("File Not Exist"); } else { // 其他错误场景:权限不足、网络异常等,可根据业务需求自行处理 Debug.LogError($"校验文件失败:{storageError?.Message}"); } } else if (task.IsCompletedSuccessfully) { Debug.Log("File Exists"); } });
注意事项
- 提前配置Firebase Storage规则,开放对应路径的读权限,否则会因为权限不足返回错误,误判为文件不存在
- 你也可以通过调用
GetDownloadUrlAsync()获取下载链接的方式判断文件存在性,判断逻辑和获取元数据完全一致 - 不要在Unity主线程同步等待异步任务结果,避免出现卡顿
内容的提问来源于stack exchange,提问作者JOYSON S T
相关产品推荐
相关产品推荐

