You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:10:07