删除Firestore中的文档和Storage中的文件

时间:2019-03-16 00:21:56

标签: javascript angular firebase firebase-storage

我正在用Angular 6和angularfire2做一个Web应用程序。我在Firestore中的文档有一个名为fileUrl的字段,其中包含存储中文件的链接。我正在尝试先删除文档,然后再删除文件。 (我不知道是否可以为此做一批)

this.competitionService.deleteCompetition(competition.id, competition.fileUrl)
          .then(res => {
            // Deleted
          }, err => {
            console.log(err);
          });

来自主要服务

deleteCompetition(competitionId: string, fileUrl: string) {
    return new Promise<any>((resolve, reject) => {
      this.competitionsCollection.doc(competitionId).delete()
        .then(res => {
          if (fileUrl) {
       this.uploadService.deleteFile(fileUrl).then(response => {
              resolve(res);
            }, err => {
              console.log(err);
            });
            resolve(res);
          } else {
            resolve(res);
          }
        }, err => {
          reject(err);
        });
    });
  }

存储的另一项服务

getMetadata(url: string) {
    const ref = this.storage.ref(`${config.storage_files}/${url}`);
    return ref.getMetadata().toPromise();
  }

async deleteFile(fileUrl: string) {
    const fileMetadata: FileMetadata = await this.getMetadata(fileUrl);

    return new Promise<any>((resolve, reject) => {
      this.storage.ref(fileMetadata.fullPath).delete().toPromise()
        .then(res => {
          resolve(res);
        }, err => {
          reject(err);
        });
    });
  }
  

FirebaseStorageError {code_:“存储/未找到对象”,message_:   “ Firebase存储:对象   '文件/https:/firebasesto...4c92-3a0e-45d4-adf3-5d81900f3953'不   存在。“,serverResponse _:” {↵“错误”:{↵“代码”:404,↵
  “ message”:“未找到。无法获取对象”↵}↵}“,名称_:   “ FirebaseError”}

我不明白我收到的错误原因。

我的目标是在Firestore中删除文档,然后在Storage中删除文件,然后向用户显示一条消息。

1 个答案:

答案 0 :(得分:1)

您不能使用此类文件的公共https下载URL建立对文件的引用。您需要存储中文件的路径才能建立参考。

我建议还将路径存储在文档中,以便以后删除时更容易。但是,您也可以使用Reference将下载URL转换为refFromUrl()

相关问题