【问题标题】:Problem in uploading url of current image to firestore database将当前图像的 url 上传到 firestore 数据库时出现问题
【发布时间】:2021-07-25 08:46:45
【问题描述】:

当我上传第一个图像时,它会存储在云存储中,但它不会将图像 url 存储在 Firebase Firestore 数据库中,当我上传第二个图像时,它会再次存储在云存储中,但它会存储在 Firebase Firestore 数据库中第一个图像的 url,然后再次如果我上传第三个图像,它会存储在云存储中,但令人惊讶的是,它会将第二个图像的 url 上传到 firebase firestore 数据库中,依此类推。简而言之,它不存储当前图像的 url,在上传当前图像时,它会上传并显示前一个图像,但是如果我们检查云存储,其中存储了三张图像,但在 firestore 数据库中只有两个 URL图像。我已经尝试过(更新({“images”:urls }))和(更新({“images”:FieldValue.arrayUnion(urls)})),你可以看到我已经评论了另一个,两者都给出了相同的结果/问题。所以,我不知道这是什么原因?请帮助我并提前感谢。下面是上传的代码..

  _uploadImages() async {
   _images.forEach((image) {
  if(image!=null) {
    var _ref = _stoarge.ref().child("images/" + basename(image.path));
    _ref.putFile(image).whenComplete(() async {
      String url = await _ref.getDownloadURL();

      print(url);
      urls.add(url);
      print(url);
    });
  }
});
print("uploading:"+urls.asMap().toString());
await  FirebaseFirestore.instance.collection("users")
  .doc(auth.currentUser.uid).update({"images": urls });
  //  .doc(auth.currentUser.uid).update({"images": FieldValue.arrayUnion(urls) });
 } 

【问题讨论】:

    标签: firebase flutter google-cloud-firestore


    【解决方案1】:

    您的代码中有async/await 问题。 forEach 不会等待内部的 async 事件,并且根本不会等待 whenCompleted

    _uploadImages() async {
      for (var image in _images) {
        var _ref = _stoarge.ref().child("images/" + basename(image.path));
        await _ref.putFile(image);
        String url = await _ref.getDownloadURL();
    
        print(url);
        urls.add(url);
        print(url);
      }
      print("uploading:" + urls.asMap().toString());
      await FirebaseFirestore.instance
          .collection("users")
          .doc(auth.currentUser.uid)
          .update({"images": urls});
      //  .doc(auth.currentUser.uid).update({"images": FieldValue.arrayUnion(urls) });
    }
    
    

    【讨论】:

    • List _images = [ ];,还是同样的问题。它上传到了云存储中,但没有上传到数据库中。
    • 你使用什么版本的firebase_storage
    • firebase_storage: ^8.0.1
    • 和。如果使用 .add({"downloadURL":url}) 那么它会在红色下方显示红线并显示“方法 'add' 没有为类型 'DocumentReference' 定义。”
    • 我已经更新了答案。你能再试一次吗?
    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2021-06-23
    • 2022-01-14
    • 2017-02-15
    • 2019-04-03
    • 1970-01-01
    相关资源
    最近更新 更多