如何在颤动中将 List<Asset> 转换为 List<File>
Posted
技术标签:
【中文标题】如何在颤动中将 List<Asset> 转换为 List<File>【英文标题】:How to convert List<Asset> to List<File> in flutter 【发布时间】:2020-06-14 10:59:29 【问题描述】:我正在使用this package 从图库中获取多个图像,它返回一个资产列表,现在我想将其发送到服务器,我使用 FormDate 但需要图像路径。
还有其他方法可以将资产图片发送到服务器吗?
如何将List<Asset>
转换为List<File>
。
如何从资产
获取图片路径或任何其他方法来完成此任务(从存储中选择多个图像并将它们发送到服务器)。
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(),
);
【问题讨论】:
使用MultipartRequest @Naeem 如果您找到答案,请在下面发布,我也使用相同的多图像选择器库,可以吗? 【参考方案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,);
【讨论】:
以上是关于如何在颤动中将 List<Asset> 转换为 List<File>的主要内容,如果未能解决你的问题,请参考以下文章
如何在颤动中将 json 数据转换为 List<widgets>?
如何在颤动中将 List<String> 转换为 String [重复]