【问题标题】:how to get image URL form firebase storage to firestore如何从firebase存储获取图像URL到firestore
【发布时间】:2021-02-27 09:33:05
【问题描述】:

我正在尝试将图像上传到 firebase 并在 firestore 中获取 URL。它确实上传了图片,但没有获取到 Firestore 的 URL。

这就是我获取图像的方式。

Future getImage1() async {
    // ignore: deprecated_member_use
    var firstImage = await ImagePicker.pickImage(
        source: ImageSource.gallery, imageQuality: 65);
    setState(() {
      _image1 = firstImage;
    });
  }

这就是我上传和获取网址的方式。

  uploadPic() async {
    Reference ref = storage.ref().child("image1" + DateTime.now().toString());
    UploadTask uploadTask = ref.putFile(_image1);
    uploadTask.then((res) {
      String url = res.ref.getDownloadURL().toString();
      imageUrl1 = url;
      return url;
    });
  }

这就是我在 Firestore 中获取链接的方式

"image 1 Url":(_image1 != null) ? await uploadPic() : null,

【问题讨论】:

  • 您希望在 Firestore 中看到什么?这里没有写任何文档的代码。 Firebase 存储是与 Firestore 完全不同的产品。
  • 您必须进行两次网络调用。一是将图像上传到存储,然后将图像 URL 存储到 firestore 集合。您已经完成了上传。您现在必须添加到 Firestore 集合或文档中。
  • 我更新了问题看看。 @DougStevenson
  • 我需要你的帮助 @PeterHaddad

标签: firebase flutter dart google-cloud-firestore firebase-storage


【解决方案1】:

getDownloadURL 是一个 Future,所以你可以这样尝试:

Future<String> uploadPic() async {
    Reference ref = storage.ref().child("image1" + DateTime.now().toString());
    UploadTask uploadTask = ref.putFile(_image1);
    String url;
    await uploadTask.whenComplete(() {
      res.ref.getDownloadURL().then((fileUrl){
      url = fileUrl as String;
      });
    });
    return url;
  }

【讨论】:

  • 它没有帮助@FarhanSyah
  • @MtKhalifa 你的错误是什么?您是否先使用 print 检查了 url 值?在 return 语句之前尝试 print(url) 和 print(fileUrl)。如果该值存在,则意味着错误在其他地方。上面的代码我都试过了,可以得到结果
  • 带有 onComplete 的部分给出以下错误。没有为类型“uploadTask”定义吸气剂“onComplete”。
  • 更改为 StorageUploadTask,引用也更改为 StorageReference。请注意,我使用的是 firebase_storage: ^4.0.1
  • 好吧,我通过降级 Firebase_Storage 的版本来让它工作
猜你喜欢
  • 2020-09-24
  • 2021-10-14
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 2021-03-14
  • 2020-03-28
  • 2019-03-10
  • 2021-07-23
相关资源
最近更新 更多