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端接口逻辑没有问题:
- 删除所有手动设置的请求头配置,无需手动指定Content-Type,
MultipartRequest会自动处理 - 修改
MultipartFile的contentType为正确的图片MIME类型 - 可选:补充图片为空时的异常处理,避免触发后端必填参数校验错误
修正后的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
相关产品推荐
相关产品推荐

