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

