【问题标题】:How to upload Assets to FirebaseStorage in Flutter?如何在 Flutter 中将资产上传到 FirebaseStorage?
【发布时间】:2021-08-05 07:14:47
【问题描述】:

这是我的挑战:

我正在使用以下方法从我的手机图库中选择多个图像(包multi_image_picker:需要添加到pubspec.yaml中)

    Future<void> loadAssets() async {
        List<Asset> resultList = <Asset>[];
        String error = 'No Error Detected';
    
        try {
          resultList = await MultiImagePicker.pickImages(
            maxImages: 300,
            enableCamera: true,
            selectedAssets: images,
            cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"),
            materialOptions: MaterialOptions(
              actionBarColor: "#abcdef",
              actionBarTitle: "Example App",
              allViewTitle: "All Photos",
              useDetailsView: false,
              selectCircleStrokeColor: "#000000",
            ),
          );
          for (int i = 0; i < resultList.length; i++) {
            print('resultList[i].name: ${resultList[i].name}');
          }
        } on Exception catch (e) {
          error = e.toString();
        }
    
        if (!mounted) return;
    
        setState(() {
          images = resultList;
          _error = error;
        });
      }

我的变量resultList存储资产实例。我想将这些资产上传到 FirebaseStorage 中的某个路径。

过去,我使用的是 image_picker: 包,它只允许我从手机图库中选择一张图片。但是image_picker 可以将选定的图像存储为文件类型而不是资产,并且从文件类型中我可以获取可以用来将图像上传到我的 FirebaseStorage 的图像路径。

但我不知道如何将从方法 loadhAssets() 获取的资产上传到我的 FirebaseStorage。 有人知道如何解决这个问题吗?

我希望我的担忧足够清楚。 非常感谢提前:)

【问题讨论】:

    标签: firebase file dart firebase-storage assets


    【解决方案1】:

    image_picker 包还允许您选择多个图像,而不仅仅是一个。我这里有一个示例实现代码:

      List<XFile> selectedImages = [];
      
      Future<void> pickImages() async {
        final pickedFileList = await ImagePicker().pickMultiImage();
        if (pickedFileList != null) {
          setState(() {
              selectedImages = pickedFileList;
          });
        }
      }
    

    您可以通过以下方式将所选图片上传到 Firebase 存储:

    FirebaseStorage storage = FirebaseStorage.instance;
    Reference storageRef = storage.ref();
    List<String> imgURL = []; //to store url of uploaded images
    
      Future<void> uploadSelectedImages() async {
        for (var i = 0; i < selectedImages.length; i++) {
          final ref = storageRef.child('Photos/image$i');
          await ref.putFile(File(selectedImages[i].path)).whenComplete(() async {
            await ref.getDownloadURL().then((value) { //upload and get URL
              setState(() {
                imgURL.add(value);
              });
            });
          });
        }
      }
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 1970-01-01
      • 2018-12-28
      • 2021-11-11
      • 2012-05-31
      • 2021-05-10
      • 2020-08-01
      • 2021-11-16
      • 2016-01-30
      相关资源
      最近更新 更多