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

Flutter:如何在Multipart请求中附带ID等键值对?

在Multipart文件上传时附带ID参数的解决方案

嗨,这事儿其实很简单,你已经用到的MultipartRequest对象里的fields属性就是专门用来添加这类普通键值对参数的!

你可以通过两种方式把ID参数加进去:

方式一:单独添加单个参数

直接给fields字典赋值即可,比如:

request.fields['id'] = '你的目标ID值';

方式二:批量添加多个参数(包含ID)

如果还有其他参数要一起传递,就像你代码里的other变量那样,把ID放进这个Map里批量传入:

// 假设other是包含ID及其他参数的Map
Map<String, String> other = {
  'id': '你的目标ID值',
  '额外参数1': '参数值1',
  '额外参数2': '参数值2'
};
request.fields.addAll(other);

修改后的完整代码示例

我把添加ID的部分标出来了,还修正了你代码里的一个小笔误(文件名字段对应错误的文件路径):

Upload() async {
  var stream = new https.ByteStream(DelegatingStream.typed(Files[0].openRead()));
  var length = await Files[0].length();
  var stream1 = new https.ByteStream(DelegatingStream.typed(Files[1].openRead()));
  var length1 = await Files[1].length();
  var stream2 = new https.ByteStream(DelegatingStream.typed(Files[2].openRead()));
  var length2 = await Files[2].length();
  
  var uri = Uri.parse(openurl);
  var request = new https.MultipartRequest("POST", uri);
  
  var multipartFile1 = new https.MultipartFile('XX', stream, length, filename: basename(Files[0].path));
  var multipartFile2 = new https.MultipartFile('YY', stream1, length1, filename: basename(Files[1].path));
  var multipartFile3 = new https.MultipartFile('ZZ', stream2, length2, filename: basename(Files[2].path));
  
  request.files.add(multipartFile1);
  request.files.add(multipartFile2);
  request.files.add(multipartFile3);
  
  // 👇 添加ID参数的核心代码
  request.fields['id'] = '你的ID值';
  // 如果有多个参数,也可以用批量添加的方式
  // request.fields.addAll({'id': '你的ID值', '其他参数': '对应值'});
  
  var response = await request.send();
  print(response.statusCode);
  response.stream.transform(utf8.decoder).listen((value) {
    print(value);
  });
}

补充说明

Multipart请求里,files属性负责承载文件二进制数据,fields属性则负责传递普通的表单键值对。服务器端只需要像接收普通表单参数一样,通过id这个键就能获取到你传递的值啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:38:04