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

