springcloud微服务之间通过feign调用方式上传文件MultipartFile

mac2025-09-05  10

通过我们使用spring系列的框架上传文件,都会利用MultipartFile文件流进行文件的上传。但是我在最近的项目中遇到一个问题,我们的项目是基于springboot框架的springcloud微服务搭建的,后端服务技术层面整体上分为business服务和core服务,business服务用于作为应用层,直接连接用户端,通常用于聚合数据,core服务用于基本很少变动的非业务核心接口。那么用户的上传过程实现,就要通过前端页面调用business服务上传接口,然后business服务调用core服务的上传接口实现文件上传。在服务与服务之间通过feign调用时,发现MultipartFile文件流上传文件会报错。经过不断摸索以及网上的方案。最终解决了,现在把问题方案贴出来,希望能帮到有需要的开发者朋友。

一、编写配置类

编写一个配置类,也就是把multipart/form-data格式的文件流编码为spring框架能够解析的格式

@Configuration public class MultipartSupportConfig { @Autowired private ObjectFactory<HttpMessageConverters> messageConverters; @Bean public Encoder feignFormEncoder() { return new SpringFormEncoder(new SpringEncoder(messageConverters)); } }

二、服务调用方加注解类

/** * @author guobinhui * @date 2019/10/31 */ @FeignClient(name="xxxx", configuration = MultipartSupportConfig.class) public interface CreditEvaluationClient { @ApiOperation(value = "信用评估上传营业执照", notes = "信用评估上传营业执照") @PostMapping(value="/custevaluation/uploadFile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public DataResponseEntity<?> uploadFile(@RequestPart("file") MultipartFile multipartFile,@RequestParam("custId") String custId)throws FastDfsException;

三、被调用的服务接收文件流

@ApiOperation(value = "信用评估上传营业执照", notes = "信用评估上传营业执照") @PostMapping("/uploadFile") public ResponseEntity <?> uploadFile(@RequestPart("file") MultipartFile multipartFile,@RequestParam("custId") String custId)throws FastDfsException{ String fileName = multipartFile.getOriginalFilename(); String ext = fileName.substring(fileName.indexOf(".")+1, fileName.length()); if(!ext.equals("pdf") && !ext.equals("jpg") && !ext.equals("png")){ return ResponseHelper.fail(MsConstant.ILLEGAL_FILE_EXT); } String path = custEvalService.uploadFile(multipartFile,custId); return ResponseHelper.success(path); }

注意:文件流要用RequestPart注解传参,其余参数用RequestParam注解传参

最新回复(0)