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

时间:2018-04-12 16:28:00

标签: angular firebase firebase-storage angularfire2

我基本上对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。我尝试删除该文件夹时收到上述错误。请帮忙,我该怎么做?

3 个答案:

答案 0 :(得分:3)

即使文档中没有,您也正在使用正确的方法使用AngularFireStorage删除文件。我自己使用它,你可以在source files中查看它。

好像你的client.uid没有引用任何资源。

但即使是这样,当你试图删除那个文件夹时,你也会说#34;"但根据this post 您无法删除文件夹,您必须保留文件列表。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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()
  });
})