发生了存储异常。位置 -> 中不存在对象,删除 Firebase 存储中的文件夹/路径时



我将用户照片存储在以其uid命名的firebase存储文件夹/路径中。删除文件不会有问题,但是当我试图删除文件夹/路径时包含它,我得到了这个异常和其他异常,尽管文件夹被删除:

E/StorageException(16352): StorageException has occurred.日志含义对象在该位置不存在。

这是一个delete方法的代码片段:
// Delete Profile Photo
try {
final profilePhotoRef = FirebaseStorage.instance.ref().child('images/${user.uid}');
// delete every file within the path
profilePhotoRef.listAll().then((value) {
for (var element in value.items) {
FirebaseStorage.instance.ref(element.fullPath).delete();
}
});
// Now delete the containing folder/path
profilePhotoRef.delete();   // --> here is the problem
} on FirebaseException catch (e) {
print("Failed with error '${e.code}': ${e.message}");
}

,这是我得到的异常列表:

W/NetworkRequest(16352): No App Check token for request。E/StorageException(16352): StorageException has occurred.日志含义E/StorageException(16352): Object does not exist at location。E/StorageException(16352): Code: -13010 HttpResult: 404E/StorageException(16352): {"error"; {"code"; 404, "message";}}E/StorageException(16352): java.io.IOException: {"error": {"code": 404, "message": "Not Found."}}E/StorageException(16352): at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:445)E/StorageException(16352): at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:462)E/StorageException(16352): at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:453)E/StorageException(16352): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)E/StorageException(16352): at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:289)E/StorageException(16352): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:76)E/StorageException(16352): at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:68)E/StorageException(16352): at com.google.firebase.storage.DeleteStorageTask.run(DeleteStorageTask.java:59)E/StorageException(16352): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)E/StorageException(16352): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)E/StorageException(16352): at java.lang.Thread.run(Thread.java:923)E/flutter (16352): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)]未处理异常:[firebase_storage/object-not-found]所需引用处不存在对象。E/flutter (16352): #0 standardmethodcodecs . decodeenvelope(软件包:flutter/src/services/message_codecs.dart:653:7)E/flutter (16352): #1 MethodChannel。_invokeMethod(包:颤振/src/服务/platform_channel.dart: 315:18)E/颤振(16352):E/flutter (16352): #2 MethodChannelReference.delete(包:firebase_storage_platform_interface/src/method_channel/method_channel_reference.dart:26:7)E/颤振(16352):E/颤振(16352):D/FirebaseAuth(16352):通知id令牌侦听器有关签出事件。D/FirebaseAuth(16352):通知认证状态侦听器关于签出事件。在3,669ms内重新加载1803个库中的1个(编译:1488 ms,重新加载:1010 ms,重新组装:302 ms)。W/example.khedme(16352):将Gc直方图窗口从153个减少到100个

提前谢谢你,花了我很多时间,我没有找到一个解决方案。

实际上Google Cloud Storage并没有真正的"文件夹",这就是为什么你会得到" Object does not exist at location ";例外。

在Cloud Storage控制台中,bucket中的文件以文件夹的层次树形式呈现(就像本地硬盘上的文件系统一样),但这只是呈现文件的一种方式:bucket中没有真正的文件夹/目录。Cloud Storage控制台只是使用文件路径的不同部分来"模拟"。一个文件夹结构,使用"/"分隔符字符。

这个关于云存储和gsutil的文档很好地解释和说明了这种"分层文件树的错觉"。

最新更新