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

Flutter多图上传异常:Postman正常但代码仅传最后一张图

问题原因

你当前的Flutter代码里,用Map作为http.post的body参数时,重复的键会被覆盖。因为Map的键是唯一的,循环给'canvas_images[]'赋值时,每一次迭代都会替换掉前一次的值,最终服务器只能收到最后一张图片的base64数据。

修复方案

有两种可行的修复方式:

方式一:用List<MapEntry<String, String>>替代Map作为body

Dart的http.post支持把body传成List<MapEntry<String, String>>类型,这样相同键的多个条目会完整发送给服务器,不会被覆盖。修改代码如下:

var response = await http.post(
  Uri.parse(url),
  headers: headers,
  body: [
    // 保留原有其他参数,比如:
    // MapEntry('comment_content', 'your_comment'),
    ...imgList.map((img) => MapEntry('canvas_images[]', img)),
  ],
);

方式二:将图片列表转为JSON字符串传递(需服务器支持)

如果服务器能接收JSON格式的图片列表,可以把imgList序列化为JSON字符串,作为单个参数传递:

var response = await http.post(
  Uri.parse(url),
  headers: {
    ...headers,
    'Content-Type': 'application/json', // 必须添加JSON类型的请求头
  },
  body: json.encode({
    // 其他参数
    'canvas_images': imgList,
  }),
);

这种方式需要服务器端调整参数解析逻辑,接收名为canvas_images的数组参数。

补充说明

Postman能正常工作是因为它发送多个同名参数时,会自动以多值参数的形式发送,不会像Dart的Map那样覆盖重复键的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:52:37