You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法发送包含文档列表的多部分请求问题咨询

无法发送包含文档列表的多部分请求问题咨询

各位大佬好,我最近在Flutter项目里遇到个多部分请求的坑,折腾半天没搞定,来求助下!

需求是给后端发送一个包含文档列表的FormData请求,用来更新签证预约的相关文档,同时还要带上签证ID和要删除的文档ID列表。我写了一段代码,但现在的问题是后端始终接收不到NewDocuments这个文件列表,要么说字段不存在,要么说格式不对。

我先把当前的代码贴出来,麻烦帮忙看看哪里有问题:

@override
Future<SuccessResponse> changeDocument(
  int visaAppointmentId,
  List<NewDocumentsRequest> newDocuments,
  List<int> deletedDocuments,
) async {
  try {
    FormData data = FormData();
    data.fields
        .add(MapEntry('VisaAppointmentId', visaAppointmentId.toString()));

    for (var element in deletedDocuments) {
      data.fields.add(MapEntry('DeletedDocuments', element.toString()));
    }

    for (var documentRequest in newDocuments) {
      String fileName = documentRequest.document!.path.split('/').last;

      List<int> bytes = await documentRequest.document!.readAsBytes();

      var contentType = lookupMimeType(documentRequest.document!.path);
      var parts = contentType!.split('/');
      var type = parts[0];
      var subtype = parts[1];
      var mediaType = MediaType(type, subtype);

      MultipartFile multipartFile = MultipartFile.fromBytes(
        bytes,
        filename: fileName,
        contentType: mediaType,
      );
      // 这里我尝试把每个文件加入FormData,但不确定数组类型的文件字段是不是这么加的
      data.files.add(MapEntry('NewDocuments', multipartFile));
    }

    final response = await _dio.post(
      '/VisaAppointment/ChangeDocument',
      data: data,
      options: Options(headers: await _getHeaders()),
    );

    return SuccessResponse.fromJson(response.data);
  } catch (e) {
    rethrow;
  }
}

我已经排查过的点:

  • 文件的字节读取是正常的,能正确获取到文件内容
  • MIME类型解析也没问题,图片、PDF这些都能得到正确的mediaType
  • 后端接口约定的接收字段就是NewDocuments,是一个文件数组类型

有没有大佬能帮我看看,是不是FormData中数组类型的文件字段构造方式不对?或者还有其他我没注意到的细节?

备注:内容来源于stack exchange,提问作者Bear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:23:02