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

如何在Flutter中用Retrofit上传动态数量的List<File>多文件

Flutter Retrofit 动态多文件上传实现方案

1. 修改Retrofit接口定义

把原来的单文件参数替换成接收List<MultipartFile>的参数,两种写法都能正常适配多文件上传场景:

写法一(使用@PartList注解):

@POST('/store')
@MultiPart()
Future<dynamic> store({
  @Part() required String title,
  @PartList() required List<MultipartFile> files,
});

写法二(直接用@Part):

@POST('/store')
@MultiPart()
Future<dynamic> store({
  @Part() required String title,
  @Part() required List<MultipartFile> files,
});

两种写法都会自动生成符合多文件上传要求的表单字段,适配绝大多数后端接收逻辑。

2. 转换文件类型

Retrofit仅支持MultipartFile类型的文件上传,所以需要将你手中的List<File>批量转换成该类型,用MultipartFile.fromFile方法处理即可:

// 假设这是你动态获取到的文件列表
List<File> yourFileList = []; 

// 批量转换为Retrofit支持的类型
List<MultipartFile> uploadFiles = await Future.wait(
  yourFileList.map((file) async => MultipartFile.fromFile(
        file.path,
        filename: file.path.split('/').last, // 可选,自定义上传的文件名
      )),
);

3. 调用接口完成上传

直接把转换后的文件列表传入接口方法即可:

await yourApiInstance.store(
  title: "测试标题",
  files: uploadFiles,
);

注意事项

  • 提前确认后端接收参数的名称:如果后端文件参数名不是files,可以在@Part里指定name属性,比如@Part(name: "attachments") required List<MultipartFile> files。
  • 极少场景下后端要求每个文件参数名单独命名(比如file1、file2),这种情况可以手动构建List<Part>逐个指定参数名,但绝大多数业务场景用上面的方法就足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:10:35