美文网首页
Flutter Dio 多文件上传失败,服务收不到文件。

Flutter Dio 多文件上传失败,服务收不到文件。

作者: 星邪Ara | 来源:发表于2021-08-31 15:21 被阅读0次

原因是两种不同for循环导致的。
在Flutter 为了方便大部分都会使用forEach或者map的,结果就是这种方式导致没有拿到文件。

服务端获取不到文件写法

      view?.showLoadingProgress();
      //就是使用map导致的
      List<Future<MultipartFile>> files = paths.map((path) async {
        String filename = path.substring(path.lastIndexOf("/") + 1);
        return await MultipartFile.fromFile(path, filename: filename);
      }).toList();
      FormData formData = new FormData.fromMap({"file": files});
      DioHolder().call(
        MainApiConstant.UPLOAD,
        method: DioHolder.POST,
        data: formData,
        onSuccess: (map) {
          view?.onSubmitSuccess();
          view?.dismissLoadingProgress();
        },
        onError: (NetError e) {
          view!.onToast(e);
          view?.dismissLoadingProgress();
        },
      );
    });

修改后写法(解决)

      view?.showLoadingProgress();
      List<MultipartFile> files = [];
      for (var file in imageFiles) {
        String filename = file.path.substring(file.path.lastIndexOf("/") + 1);
        var suffix = filename.substring(filename.lastIndexOf(".") + 1);
        MultipartFile multipartFile = await MultipartFile.fromFile(
          file.path,
          filename: "filename.$suffix",
          contentType: MediaType.parse("image/$suffix"),
        );
        files.add(multipartFile);
      }
      FormData formData = FormData.fromMap({"files": files});
      DioHolder().call(
        MainApiConstant.UPLOAD,
        method: DioHolder.POST,
        data: formData,
        options: Options(
          contentType: "multipart/form-data",
        ),
        onSuccess: (map) {
          view?.onSubmitSuccess();
          view?.dismissLoadingProgress();
        },
        onError: (NetError e) {
          view!.onToast(e);
          view?.dismissLoadingProgress();
        },
      );
    });

相关文章

网友评论

      本文标题:Flutter Dio 多文件上传失败,服务收不到文件。

      本文链接:https://www.haomeiwen.com/subject/wyeziltx.html