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

Flutter使用Dio发送multipart类型请求上传文件报错如何解决?

Dio multipart/form-data 上传文件错误修复方案

错误1:SocketException Connection refused(错误码61)处理

该错误为网络连通性问题,和请求头配置无关,按以下顺序排查:

  • 确认请求url填写正确:如果是本地调试服务端,安卓模拟器不能使用127.0.0.1访问电脑本地服务,需替换为模拟器专属映射地址10.0.2.2;iOS模拟器/真机请使用电脑在局域网内的真实IP
  • 确认服务端已正常启动,对应端口没有被系统防火墙/安全软件拦截
  • 确认运行应用的设备/模拟器和服务端处于同一局域网,网络可以正常互通

错误2:Http 400 状态码错误处理

400错误为请求格式不符合服务端要求,你遇到的问题大概率是手动配置content-type导致的:
Dio在发送FormData类型数据时,会自动生成带boundary分段边界参数的multipart/form-data请求头,手动写死content-type会丢失boundary参数,导致服务端无法解析上传的分段数据。按以下步骤修正:

  • 删除Options中手动配置的contentType: "multipart/form-data"参数,同时删除全局配置中的_defaultContentType = "multipart/form-data"配置,由Dio自动处理请求头即可
  • 确认FormData中的上传字段名和服务端要求的完全一致:你当前使用的字段名为file,需和后端约定的上传参数名完全匹配(大小写敏感)
  • 确认getToken()方法返回的token有效,没有为空、过期或者格式错误的问题
  • 确认上传的本地文件路径有效,文件没有被损坏或删除

修正后的代码示例

Dio dio = Dio();
String fileName = event.file!.path.split('/').last;
FormData formData = FormData.fromMap({
  "file": await MultipartFile.fromFile(event.file!.path, filename: fileName),
});
try {
  var response = await dio.post(
    "替换为你的实际请求url",
    data: formData,
    options: Options(
      headers: {
        "token": await getToken(),
      }
    ),
  );
  // 处理请求成功逻辑
} catch (e){
  print(e);
}

内容的提问来源于stack exchange,提问作者김민진

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:57:04