firebase - AngularFire2 - Firebase 存储 getDownloadURL() - 如何返回 firestore 的 url

标签 firebase firebase-storage angularfire2

我一直在浏览 angularfire2 文档以从存储中检索 downloadURl。我希望我在这里错过了一些简单的东西。

文档指出:

@Component({
  selector: 'app-root',
  template: `<img [src]="profileUrl | async" />`
})
 export class AppComponent {
   profileUrl: Observable<string | null>;
   constructor(private storage: AngularFireStorage) {
   const ref = this.storage.ref('users/davideast.jpg');
   this.profileUrl = ref.getDownloadURL();
 }
}

但是,一旦我上传了图像,我想将下载网址作为字符串返回以上传到 firestore。我需要外部服务的下载 URL。

我的功能

uploadImage(base64data) {

  const filePath = (`myURL/photo.jpg`);
  const storageRef = firebase.storage().ref();

  var metadata = {
    contentType: 'image',
    cacheControl: "public, max-age=31536000",
  };

  const ref = this.storage.ref(filePath);
  const task = ref.putString(base64data, 'data_url', metadata).then(() => {

    var downloadURL = ref.getDownloadURL();

  })

}

这样就可以完美上传图像了。但是,我想将下载 URL 写入 firestore。当控制台记录我的“downloadURL”变量时,我得到以下信息:

PromiseObservable {_isScalar: false, promise: y, scheduler: undefined}

下载内容位于可观察的 promise 内。如何获取下载 URL 字符串作为我的变量?一旦我有了这些,我就可以对 Firestore 更新进行排序。

最佳答案

//observable to store download url
downloadURL: Observable<string>;

task.snapshotChanges().pipe(
    finalize(() => {
        this.downloadURL = fileRef.getDownloadURL();
        this.downloadURL.subscribe(url=>{this.imageUrl = url})
    })
)

引用:https://github.com/ReactiveX/rxjs/blob/master/doc/observable.md

关于firebase - AngularFire2 - Firebase 存储 getDownloadURL() - 如何返回 firestore 的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49362553/

相关文章:

android - Firebase 重复文件构建错误

java - 无法从 Firebase 获取下载网址

swift - 以原子方式将文件上传到 Firebase 存储和数据库

javascript - #AskFirebase : Is there a built-in method for securely checking for and existing User e-mail in Firebase?

angular - 如何在 AngularFire2 的 Firestore 中检索集合的文档 ID

javascript - ForEach 比我的 Observable 返回值更快

android - Ionic View Google 登录弹出窗口在 Firebase 2 中有效,但在 Firebase 3 中无效(在浏览器中有效)

node.js - 无法使用对话流实现将数据添加到 firestore

firebase - 使用 React Native 将图像源设置为 Firebase Storage URL

java - 未将图像 URL 字符串获取到 FirebaseDatabase