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

原因是两种不同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();
        },
      );
    });
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容