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

Flutter Web使用Dio上传文件遇类型转换错误求助

解决方案

问题出在Flutter Web环境下,file_picker返回的文件字节是JSArray<int>(属于List<int>的子类),但Dio的MultipartFile.fromBytes要求传入Uint8List类型,直接传递会触发类型不匹配错误。

解决方法很简单,显式把List<int>转换成Uint8List即可,用Uint8List.fromList()方法完成转换:

修改你的代码中MultipartFile.fromBytes的参数部分:

final body = <String, dynamic>{};
if (fields != null) {
  body.addAll(fields);
}

body.addAll({
  "files": files
      .map((file) => MultipartFile.fromBytes(
            // 显式转换为Uint8List
            Uint8List.fromList(file.bytes),
            filename: file.fileName,
          ))
      .toList()
});

final formData = FormData.fromMap(body);

Response<Map<String, dynamic>> response =
    await dio.postUri<Map<String, dynamic>>(url, data: formData, options: options);

原理是Uint8List.fromList()会把任意List<int>转换成符合要求的无符号8位整数列表,完美适配Dio在Web环境下的文件上传需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:28:11