将多个图像的异步图像上传到firebase存储

Posted

技术标签:

【中文标题】将多个图像的异步图像上传到firebase存储【英文标题】:async image upload in flutter for multiple images to firebase storage 【发布时间】:2021-10-14 08:44:31 【问题描述】:

我正在尝试将多张图片上传到 Firebase 存储。我遇到的问题是尝试检索每个图像的 URL。如果我不尝试检索 URL,文件本身会成功上传,我看到的问题是上传与生成的 url 并行运行,因此在到达第二张图像时没有更新 url。

我得到的错误是“[firebase_storage/object-not-found] 在所需的引用处不存在对象。”

注意:我没有使用 forEach,因为我将要上传的文件数限制为 5。下面的代码包含在 if 语句中以检查列表长度。

 for (var i = 0; i < _imageFileList!.length; i++) 

               if (kIsWeb) 

                var bytes = await _imageFileList![i].readAsBytes();

                print('photo$i');


                Reference snapshot =  await FirebaseStorage.instance.ref().child('items/$itemkey/photo$i');

                UploadTask uploadFile = snapshot.putData(bytes);

// If I delete the following 2 lines then the uploadof multiple files works without any issues.

                  imagesUrls.add(await (snapshot.getDownloadURL()));

                  print(imagesUrls);

/////    /////    /////    /////    /////    /////

               else 

                String filePath = 'items/$itemkey/photo$i.jpg';

                Reference snapshot = FirebaseStorage.instance.ref().child(filePath);

                UploadTask uploadFile = snapshot.putFile(File(_imageFileList![i].path));

// currently doesnt work but testing on web so this doesnt trigger.

                final String downloadUrl = await snapshot.getDownloadURL();

                print(downloadUrl);

//////////////////////////////////
              


            

如何让这些运行异步或等待?我不能将 await 放在 for 循环前面,因为颤动告诉我我不能将 await 用于正常的 for 循环。

【问题讨论】:

【参考方案1】:

我在不正确的语句上使用了 await 函数。为了实现上述目的,await 应该位于上传任务的下一行,并且应该包含在“.then”语句中。下面是解决方案

Reference snapshot =  FirebaseStorage.instance.ref().child('items/$itemkey/photo$i');

                await snapshot.putData(bytes).then((value) async

                  imagesUrls.add(await (snapshot.getDownloadURL()));
                  //
                  print(imagesUrls);


                );

【讨论】:

以上是关于将多个图像的异步图像上传到firebase存储的主要内容,如果未能解决你的问题,请参考以下文章

当我将图像上传到 Firebase 时,来自 Database Realtime 的图像 url 与 firebase 存储中的图像 url 不同

如何将多个图像上传到Firebase存储并返回多个downloadURL

Flutter firebase setData()函数在完成异步函数之前将空值分配给字段

将多个图像存储到 Firebase 并获取 url

如何按选择的顺序将多个文件上传到 Firebase 存储?

是否可以使用 Firebase 存储将多个图像添加到 Firebase 数据库? - 颤振