【问题标题】:Flutter multipart/form-data send list of itemsFlutter multipart/form-data 发送项目列表
【发布时间】:2021-04-15 14:46:12
【问题描述】:

我的使用包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

【问题讨论】:

  • 您必须使用 for 循环并为列表分配索引

标签: arrays flutter http dart multipartform-data


【解决方案1】:

我已经找到了一个答案,我已经在另一个类似的问题中发布了这个答案。我将代码sn-p放在这里。

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

【讨论】:

    【解决方案2】:

    这可能是旧的,但您可以通过将数组项添加到表单数据数组中轻松地做到这一点

    final FormData formData = FormData({});
    
    // Add all normal string request body data
    formData.fields.add(MapEntry("name", "Olayemii"));    
    formData.fields.add(MapEntry("age", 99));   
    
    // Add all files request body data
    formData.files.add(MapEntry("profile_photo", file));
    
    
    // Add the array item 
    List<String> seedlings = ['Apple', 'Banana'];
    
    seedlings.forEach((element) {
        formData.fields.add(MapEntry("seedlings[]", element.toString()));
    });
    

    【讨论】:

      猜你喜欢
      • 2018-04-08
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2021-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多