首页 > 解决方案 > 如何使用 Dio 将多个图像上传到服务器?

问题描述

CreatePostImage(String author,List<File> images) async {
  try {
    String imagename;
    FormData formData = new FormData.fromMap({
      'author' : author.toString(),
      'MediaImageArray': [
        for (var i = 0; i < images.length; i++) {imagename = images[i].path.split('/').last,
          await MultipartFile.fromFile(images[i].path, filename: imagename), }
      ]});
 
    Response response = await Dio().post("$SERVER_IP/api/articles/", data: formData);
    print(response.toString());
  } catch (e) {
    print(e);
  }
}

我尝试了这段代码,但它向服务器发布了空值。知道解决方案的人吗?

更新

{"id":"bb1936af-01ad-4873-ad14-7dc3aedee632","author":"d39d29c8-4807-41c5-a3fa-e9cb117fdb2d","MediaImageArray":null}

这是我得到的输出。

标签: flutterdart

解决方案


文档

FormData.fromMap({
    "files": [
      MultipartFile.fromFileSync("./example/upload.txt",
          filename: "upload.txt"),
      MultipartFile.fromFileSync("./example/upload.txt",
          filename: "upload.txt"),
    ]
  });

所以在你的情况下,你会有这样的事情:

CreatePostImage(String author,List<File> images) async {
  try {
    String imagename;
    FormData formData = new FormData.fromMap({
      'author' : author.toString(),
      'MediaImageArray': images.map((item)=> MultipartFile.fromFileSync(item.path,
          filename: item.path.split('/').last)).toList()
});
 
    Response response = await Dio().post("$SERVER_IP/api/articles/", data: formData);
    print(response.toString());
  } catch (e) {
    print(e);
  }
}

推荐阅读