如何在Flutter中使用Dio上传图片列表?
解决Flutter Dio上传图片列表的问题
你之前的代码只能上传一张图片,核心原因是循环中反复给同一个'document'键赋值,后面的文件会直接覆盖前面的,最终FormData里只保留最后一个文件。下面提供两种可行的解决方案:
方案1:服务器支持数组形式字段(推荐)
大部分后端框架都支持接收数组类型的表单字段,你可以将所有图片文件添加到同一个字段的列表中:
方式A:循环添加到FormData
import 'package:dio/dio.dart'; // 构建FormData var formData = FormData(); for (var imageFile in file) { // 字段名根据后端要求调整,有些后端直接用'document'即可,无需[] formData.files.add(MapEntry( 'document[]', await MultipartFile.fromFile(imageFile.path), )); } // 发起上传请求 try { var response = await Dio().post( '你的服务器上传接口地址', data: formData, ); // 处理响应 print(response.data); } catch (e) { // 处理错误 print(e); }
方式B:用Future.wait批量生成MultipartFile
var formData = FormData.fromMap({ 'document': await Future.wait( file.map((imageFile) => MultipartFile.fromFile(imageFile.path)), ), }); // 发起请求同上
方案2:服务器要求单个独立字段
如果后端要求每个图片对应不同的字段名(比如document1、document2),可以在循环中给字段名加上索引:
var formData = FormData(); for (int index = 0; index < file.length; index++) { formData.files.add(MapEntry( 'document${index + 1}', await MultipartFile.fromFile(file[index].path), )); } // 发起请求同上
内容的提问来源于stack exchange,提问作者Harsh
相关产品推荐
相关产品推荐

