如何使用Angularfire2从Firebase存储中删除

93ze6v8z  于 2023-02-09  发布在  Angular
关注(0)|答案(4)|浏览(149)

我基本上是Angularfire2的新手,当用户按下删除按钮时,我正试图从Firebase存储中删除一个文件夹。不幸的是,这样的信息并不在Angularfire2 documentation中。
我基本上尝试使用下面的代码:

constructor(private afs: AngularFirestore, private storage: AngularFireStorage) { 
      this.clientsCollection = this.afs.collection('clients', ref => ref.orderBy('uid', 'asc'));;
  }

   deleteClient(client, callback){
    this.storage.ref(client.uid).delete();
  }

不幸的是,它抛出以下错误

FirebaseStorageError {code_: "storage/object-not-found", message_: "Firebase Storage: Object '3CqyNHrIwQ3sRlj83JKM' does not exist.", serverResponse_: "{↵  "error": {↵    "code": 404,↵    "message": "Not Found.  Could not delete object"↵  }↵}", name_: "FirebaseError"}

我把每个客户的文档都存储在一个文件夹中,这个文件夹的名称类似于客户的 uid。这实际上只是Firebase生成的一个ID。当我试图删除这个文件夹时,我得到了上面的错误。请帮助,我该怎么做?

osh3o9ms

osh3o9ms1#

我认为更好的方法是***通过下载URL删除文件***,为此,您只需在注入的AngularFireStorage依赖项的示例上调用storage.refFromURL(url).delete()

...
constructor(private storage: AngularFireStorage) { }
...
delete(downloadUrl) {
  return this.storage.storage.refFromURL(downloadUrl).delete();
}
...
gwo2fgha

gwo2fgha2#

即使文档中没有,您使用AngularFireStorage删除文件的方法也是正确的。我自己使用它,您可以在source files中检查它。
似乎您的client.uid未引用任何资源。
但即使它是,你说,“当我试图删除该文件夹”,但根据this post你不能删除文件夹,你将不得不保持文件列表。

ghhaqwfi

ghhaqwfi3#

您可以列出文件夹中的所有项目,然后逐个删除,空文件夹将自动删除!

let folderPath = 'path/to/folder';

this.storage.storage.ref(folderPath).listAll().then(data => {
  data.items.forEach(item => {
    this.storage.storage.ref(item['location']['path']).delete()
  });
})
watbbzwu

watbbzwu4#

以下代码适用于Angular v15AngularFire v7.5.0

//remove all request files
  removeRequestFiles(requestId: string) {
    const folderPath = `requests/${requestId}`;
    const folderRef = this.storage.ref(folderPath);

    folderRef.listAll().subscribe((list: ListResult) => {
      list.items.forEach((fileRef: Reference) => fileRef.delete());
    });
  }

相关问题