【问题标题】:How to convert List<Asset> to List<File> in flutter如何在颤动中将 List<Asset> 转换为 List<File>
【发布时间】:2020-06-14 10:59:29
【问题描述】:

我正在使用this package 从图库中获取多个图像,它返回一个资产列表,现在我想将其发送到服务器,我使用 FormDate 但需要图像路径。

  1. 还有其他方法可以将资产图片发送到服务器吗?

  2. 如何将List&lt;Asset&gt; 转换为List&lt;File&gt;

  3. 如何从资产

  4. 获取图片路径

或任何其他方法来完成此任务(从存储中选择多个图像并将它们发送到服务器)。

List<Asset> images = List<Asset>();

FormData imageFormData = FormData.fromMap({
  "files": images.map((image) async {
     return await MultipartFile.fromFile('assets/${image.name}', filename: image.name);
     }).toList(),
});

【问题讨论】:

  • @Naeem 如果您找到答案,请在下面发布,我也使用相同的多图像选择器库,可以吗?

标签: flutter dart


【解决方案1】:

我认为您可以在发送之前将资产文件作为文件读取,如下所示:

File imageFile = File('yourAssetsUriPath.jpg');
  • yourAssetsUriPath 默认指向您的资产文件夹,因此您只需将文件名放在路径中即可。

http 发帖可以参考here

【讨论】:

    【解决方案2】:

    利用flutter_absolute_path包。

    在 pubsec.yaml 中添加 flutter_absolute_path: ^1.0.6

    这将转换此格式的文件路径:“content://media/external/images/media/5275” 到这种格式(绝对格式) “/storage/emulated/0/DCIM/Camera/IMG_00124.jpg”

    那就利用这个方法:

    未来 imagePicker() 异步{

    List<Asset> assetArray = [];
    List <File> fileImageArray = [];
    
    try {
        assetArray = await MultiImagePicker.pickImages(
            maxImages: 300,
            enableCamera: true,
            selectedAssets:  assetArray ,
            cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"),
            materialOptions: MaterialOptions(
                actionBarColor: "",
                actionBarTitle: "ImagePicker",
                allViewTitle: "All Photos",
                useDetailsView: false,
                selectCircleStrokeColor: "#000000",
                ),
            );
    }on Exception catch (e) {
        print( e.toString());
    }
    
    assetArray.forEach((imageAsset) async {
        final filePath = await FlutterAbsolutePath.getAbsolutePath(imageAsset.identifier);
        
        File tempFile = File(filePath);
        if (tempFile.existsSync()) {
            fileImageArray.add(tempFile);
        }
    });
    
    return fileImageArray;
    

    }

    【讨论】:

      【解决方案3】:

      这是解决方案。

      List<Asset> images = List<Asset>();
      List<MultipartFile> multipart = List<MultipartFile>();
      for (int i = 0; i < images.length; i++) {
        var path = await FlutterAbsolutePath.getAbsolutePath(images[i].identifier);
        multipart.add(await MultipartFile.fromFile(path, filename: 'myfile.jpg'));
      }
      FormData imageFormData = FormData.fromMap({"files": multipart,});
      

      【讨论】:

        猜你喜欢
        • 2020-10-09
        • 2021-08-01
        • 2020-04-16
        • 1970-01-01
        • 2021-09-14
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        • 2019-07-30
        相关资源
        最近更新 更多