Удалить документ в Firestore и файл в хранилище - PullRequest
0 голосов
/ 16 марта 2019

Я делаю веб-приложение на Angular 6 и angularfire2 . В моем документе в 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 Storage: Объект» 'files / https: / firebasesto… 4c92-3a0e-45d4-adf3-5d81900f3953' не существовать. ", serverResponse_:" {↵ "ошибка": {↵ "код": 404, ↵
"message": "Not Found. Не удалось получить объект" ↵} ↵} ", name_: "FirebaseError"}

Я не понимаю причину ошибки, которую я получаю.

Моя цель - удалить документ в Firestore, а также удалить файл в хранилище, а затем показать пользователю сообщение.

1 Ответ

1 голос
/ 16 марта 2019

Невозможно создать ссылку на файл, используя его общедоступный URL-адрес загрузки https. Вам понадобится путь к файлу в хранилище, чтобы создать ссылку.

Я предлагаю также сохранить путь в документе, чтобы его было легче удалить позже. Но вы также можете преобразовать URL-адрес загрузки в Reference , используя refFromUrl().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...