上传后Firebase Storage下载url不可用



我使用的是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.

好的,所以我的问题不是真正理解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;
}
);
}

最新更新