【发布时间】:2021-02-23 04:57:35
【问题描述】:
此命令在 Linux 终端上运行良好:
curl -X POST "https://my-api.plantnet.org/v2/identify/all?api-key=11111111111111111111" -H "accept: application/json" -F "organs=flower" -F "organs=leaf" -F "images=@images/image_1.jpeg" -F "images=@images/image_2.jpeg"
您可能已经看到,有两个多值字段,organs 和 images,一个用于 String 对象,另一个用于 File 对象。
我已经编写了这个代码:
static Future<T> postFilesAndGetJson<T>(String url, {List<MapEntry<String, String>> paths, List<MapEntry<String, String>> fields}) async {
var request = http.MultipartRequest('POST', Uri.parse(url));
if (paths != null && paths.isNotEmpty) {
paths.forEach((path) {
var file = File.fromUri(Uri.parse(path.value));
var multipartFile = http.MultipartFile.fromBytes(
path.key, file.readAsBytesSync(), filename: p.basename(file.path)
);
request.files.add(multipartFile);
});
}
if (fields != null && fields.isNotEmpty) {
request.fields.addEntries(fields);
}
return http.Response
.fromStream(await request.send())
.then((response) {
if (response.statusCode == 200) {
return jsonDecode(response.body) as T;
}
print('Status Code : ${response.statusCode}...');
return null;
});
}
当字段名称不同时它工作正常,所以对于这种情况它不起作用,因为我得到状态代码400(错误请求)。
request.fields 属性是Map<String, String>,所以我不能(显然)将List<String> 设置为值。 request.files 也有类似的情况。
如何处理多值字段?
【问题讨论】:
标签: http dart http-post multipartform-data