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
相关产品推荐
相关产品推荐

