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

如何通过Dio在JSON对象的NewDocuments中发送非Base64格式文件?

解决Dio发送嵌套数组内MultipartFile的问题

要实现你需要的嵌套结构请求,核心是利用multipart/form-data的字段命名约定来模拟JSON嵌套,具体做法是给字段名加上数组下标和层级标识,后端框架(比如Spring、Laravel等)通常都能自动解析这种格式。

直接上可行的代码示例:

// 假设你已经获取了图片的bytes、文件名和媒体类型
final bytes = await File('path/to/your/image').readAsBytes();
const fileName = 'test.jpg';
const mediaType = MediaType('image', 'jpeg');

// 创建FormData对象
final formData = FormData();

// 添加嵌套数组里的id字段,格式为 数组名[索引][字段名]
formData.fields.add(MapEntry('NewDocuments[0][id]', '1'));

// 添加嵌套数组里的图片文件,字段名同样遵循层级格式
formData.files.add(MapEntry(
  'NewDocuments[0][document]',
  MultipartFile.fromBytes(
    bytes,
    filename: fileName,
    contentType: mediaType,
  ),
));

// 用Dio发送POST请求
final dio = Dio();
final response = await dio.post(
  'your-api-url',
  data: formData,
);

如果需要发送多个文档,只需要递增数组下标即可:

// 第二个文档
formData.fields.add(MapEntry('NewDocuments[1][id]', '2'));
formData.files.add(MapEntry(
  'NewDocuments[1][document]',
  MultipartFile.fromBytes(
    anotherBytes,
    filename: 'another.jpg',
    contentType: MediaType('image', 'jpeg'),
  ),
));

原理说明:multipart/form-data本身是扁平的键值对结构,没有原生的嵌套数组支持,所以通过NewDocuments[0][id]这种命名方式,告诉后端这是NewDocuments数组第0个元素的id字段,后端会自动把这些字段映射回你需要的嵌套JSON结构。

内容的提问来源于stack exchange,提问作者Bear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:42:12