Firebase 存储下载 url 上传后不可用
Firebase Storage download url not available after upload
我正在使用 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;
}
);
}
我正在使用 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;
}
);
}