首页 > 解决方案 > Flutter multipart/form-data 发送项目列表

问题描述

我使用包http

我的应用程序中有这种方法可以发送带有文件的发布请求。就我而言,我发送文件以及具有动态值的字段。我尝试发送List<String>,但服务器(后端)向我返回错误消息:

The seedlings field must be an array.

示例seedlings列表值:

List<String> seedlings = ['Apple', 'Banana'];

代码:

Future post(String path, data) async {
  await _getToken();

  var url = '${ApiConstants.BASE_URL}$path';
  var uri = Uri.parse(url);
  var request = MultipartRequest('POST', uri);

  data.forEach((key, item) async {
    if (item == null) return null;
    if (item is File) {
      request.files.add(await MultipartFile.fromPath(
        'file',
        item.path,
      ));
    } else {
      request.fields[key] = item is num
        ? item.toString()
        : item is List
            ? item.toString()
            : item;
    }
  });

  request.headers['Content-type'] = 'application/json';
  request.headers['Accept'] = 'application/json';

  var response = await request.send();
}

在我的情况下,所有字段都发送到服务器,除了具有list以下值的字段array

标签: arraysflutterhttpdartmultipartform-data

解决方案


我已经找到了一个答案,我已经在另一个类似的问题中发布了这个答案。我只是把代码片段放在这里。

final request = http.MultipartRequest('Post', uri);
List<String> ManageTagModel = ['xx', 'yy', 'zz'];
for (String item in ManageTagModel) {
    request.files.add(http.MultipartFile.fromString('manage_tag_model', item));
}

基本上,您必须使用方法将列表添加为文件fromString()。在这里找到原始答案 - https://stackoverflow.com/a/66318541/7337717


推荐阅读