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

Flutter上传图片至服务器时出现「Converting object to an encodable object failed: Instance of 'FormData'」错误的代码修改咨询

解决FormData上传图片时的编码错误问题

嘿,这个错误的根源我一眼就看出来啦——你把已经构建好的FormData对象又嵌套到了一个普通Map里传给Dio的data参数,这就导致Dio没法正确编码这种嵌套结构,才抛出了"Converting object to an encodable object failed"的错误。

Dio处理multipart/form-data类型的请求时,需要直接将FormData实例作为data参数传入,而不是再把它包装成普通的键值对Map。

修改后的代码:

void _upload(File file) async { 
  String fileName = file.path.split('/').last; 
  FormData data = FormData.fromMap({ 
    "image": await MultipartFile.fromFile(  // 把键名改成接口需要的"image"
      file.path, 
      filename: fileName, 
    ), 
  }); 
  Dio dio = new Dio(); 
  await dio.post(
    apiEndpoint + "users/avatar",
    options: Options(headers: { "Authorization": apiToken }), 
    data: data,  // 直接传入FormData实例,不用再嵌套
  ); 
}

核心修改点:

  • 调整FormData.fromMap里的键名:把原本的"file"改成了"image",因为你原本的需求是把文件作为"image"字段上传,现在直接把这个字段放到FormData里就对了
  • 去掉嵌套结构:不再用{ "image": data }包裹FormData,直接将FormData实例赋值给data参数

额外提醒下:当你传入FormData时,Dio会自动为请求设置正确的Content-Type: multipart/form-data请求头,不需要手动在headers里添加哦,避免出现头信息冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:34:09