上传后无法使用Firebase Storage下载网址

时间:2018-11-18 04:53:19

标签: firebase firebase-storage angularfire2

我正在使用Angular和AngularFire2。我正在尝试将图像上传到Firebase存储,然后完成该操作,就可以获取该参考并获取下载URL并将其上传到数据库。出于某种原因,即使上传已完成并且有快照,当我尝试使用快照以获取URL时,也会出现错误消息,指出该对象不存在。对我可能做错的事情有任何想法吗?

task.snapshotChanges().pipe(
        concatMap(snap => {
          return snap.ref.getDownloadURL()
        }),
        concatMap(url => this.db.collection('library').add({
          name: this.image.name,
          path: path,
          largeUrl: url
        }))
      ).subscribe(ref => {
        this.completed = true;
      }, error => console.log(error));

错误:

Firebase Storage: Object 'library/1542515976022_lemonade-smoothie.jpg' does not exist.

1 个答案:

答案 0 :(得分:1)

好的,所以我的问题不是真正了解concatMap。我认为直到上载Observable的最后onNext()才被调用。它在第一个onNext()上被调用,这意味着该文件尚未完全更新。下面是我最终要做的事情,尽管似乎应该有另一种方法。我只想在下载的字节等于总字节数的情况下切换到新的Observable轨道。我不确定如何用RxJS做到这一点。如果有人有任何想法,请告诉我。

task
   .snapshotChanges()
   .pipe(finalize(() => this.uploadToDb(path)))
   .subscribe();

uploadToDb(path: string) {
    this.storage
      .ref(path)
      .getDownloadURL()
      .pipe(
        concatMap(url =>
          this.db.collection('library').add({
            name: this.image.name,
            path: path,
            largeUrl: url
          })
        )
      )
      .subscribe(
        ref => (this.completed = true),
        error => {
          console.log(error);
          this.error = true;
        }
      );
  }