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

Flutter上传图片到Spring Boot报Required request part 'image'不存在如何解决

问题原因

  • 错误设置请求头:你在Flutter代码中手动指定了content-type: application/json,但你发送的是multipart/form-data格式的请求,MultipartRequest本身会自动生成带boundary参数的正确Content-Type头,手动覆盖后会导致后端无法正确解析多部分请求参数,自然识别不到image字段。同时所有Access-Control-*开头的头都是服务端返回的响应头,客户端请求不需要携带,属于无效配置。
  • 图片文件的MIME类型配置错误:你给单张图片设置的contentType: MediaType.parse('multipart/form-data')是错误的,这个值是整个请求的类型,单个图片文件应该使用对应图片格式的MIME类型,比如image/jpeg、image/png等。

解决方案

直接修改Flutter端的请求代码即可,Postman能正常调用说明Spring Boot端接口逻辑没有问题:

  1. 删除所有手动设置的请求头配置,无需手动指定Content-Type,MultipartRequest会自动处理
  2. 修改MultipartFile的contentType为正确的图片MIME类型
  3. 可选:补充图片为空时的异常处理,避免触发后端必填参数校验错误

修正后的Flutter代码示例

var postUri = Uri.parse("http://localhost:8080/v1");
var request = http.MultipartRequest("POST", postUri);
// 业务参数正常设置
request.fields['fName'] = firstNameController.text;
request.fields['lName'] = lastNameController.text;
if(image != null) {
  request.files.add(http.MultipartFile.fromBytes(
      'image', 
      image!, 
      // 替换为你实际的图片格式对应的MIME类型,png格式则修改为image/png
      contentType: MediaType.parse('image/jpeg')));
} else {
  // 按需添加图片为空的异常处理逻辑
  throw Exception("图片不能为空");
}

// 删掉原来手动加的headers配置,不需要额外设置
request.send().then((response) {
  if (response.statusCode == 200) {
    print("Success!");
  } else {
    print('Error!');
  }
});

内容的提问来源于stack exchange,提问作者Youcef LAIDANI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:54:00