【问题标题】:download url from firebase storage comes empty从 firebase 存储下载 url 为空
【发布时间】:2019-09-29 06:44:48
【问题描述】:

我正在使用 ionic 4 将图像从相机上传到 Firebase 存储。上传顺利,但我很难获得上传 URL。我的代码如下所示:

async getFromCamera(){
    this.camera.getPicture({
      destinationType: this.camera.DestinationType.DATA_URL,
      quality: 25,
      correctOrientation: true,
        allowEdit:false
  }).then(async (imageData) => {
      var base64Image = "data:image/jpeg;base64," + imageData;
      this.uploadToFireStore(base64Image).then(
            (data) => console.log("done to firestore:"  + data),
            (err) => console.log("The error to upload is:::" + JSON.stringify(err))
          )
  }, (err) => {
      console.log("Error found is:" + err);
  });
  }

  uploadPercent
  downloadURL

  uploadToFireStore(imageData){
   return new Promise<any>((resolve, reject) => {
    let storageRef = this.storage.ref('/');
    let imageRef = storageRef.child('myimage')
    const task = imageRef.putString(imageData, 'data_url')

      console.log("Task is:::" + task)
       // observe percentage changes
    this.uploadPercent = task.percentageChanges();
    // get notified when the download URL is available
    task.snapshotChanges().pipe(
        finalize(() => {
                            this.downloadURL = imageRef.getDownloadURL() 
                            console.log("upload percent:" + JSON.stringify(this.uploadPercent))
                            console.log("download url is::" + JSON.stringify(this.downloadURL))
                      } 
                )
     )
    .subscribe()
  })
  }

我看到的回应是:

upload percent:{"_isScalar":false,"source":{"_isScalar":false},"operator":{}}
/tab1-tab1-module.js:629 download url is::{"_isScalar":false}

【问题讨论】:

    标签: firebase firebase-storage angularfire2 ionic4


    【解决方案1】:

    Firebase 存储可让您上传文件,因此您无需上传很长的 base64 字符串。为什么还要上传base64

    我不熟悉this.camera.getPicture 方法返回的内容,但很确定它是File 的一种类型。在这种情况下:

    }).then(imageData => {
        this.uploadToFireStore(imageData)
    

      uploadToFireStore(imageData){
        let storageRef = this.storage.ref('/');
        let imageRef = storageRef.child('myimage')
        const task = imageRef.upload(imageData, 'data_url')
    
        this.uploadPercent = task.percentageChanges();
        task.snapshotChanges().pipe(
            finalize( async () => {
              await this.downloadURL = imageRef.getDownloadURL().toPromise();
              console.log('this.downloadURL', this.downloadURL)
    
                          } 
                    )
         )
        .subscribe()
    

    注意finalize 采用async 函数,因为imageRef.getDownloadURL() 返回一个Observable,所以我们只需要一个值,这是我们需要的唯一值,转换它看起来更简洁承诺。

    【讨论】:

    • 等待 this.downloadURL = imageRef.getDownloadURL().toPromise();我收到错误消息“;预期”
    • 这是一个拼写错误。检查是否缺少括号等。您提供的 sn-p 非常混乱,因此很可能有一些拼写错误
    猜你喜欢
    • 2018-08-09
    • 2017-06-07
    • 2021-02-13
    • 2018-12-08
    • 2016-11-26
    • 2018-07-04
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多