Feign实现微服务间文件上传
相关依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.1.3.RELEASE</version></dependency>
服务提供者
说明:
@PostMapping(value="/feignUpload")public StringfeignUpload(@RequestPart MultipartFile file){if(file.isEmpty()){thrownewRRException("上传文件不能为空");}
String suffix= file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
String url= null;try{
url= OSSFactory.build().uploadSuffix(file.getBytes(), suffix);}catch(IOException e){
e.printStackTrace();
log.error("文件上传失败===>{}", file);}
log.info("oss 文件上传成功=====>{}"+ url);return url;}
服务消费者
说明:
- 这里采用的是首先调用网关通过Spring Cloud Gateway网关调用某个服务,这里某个服务指的就是服务消费者。
- 然后服务提供者这里需要将文件上传到oss服务器中,所以这边系统调用oss服务(也就是上文的服务提供者)实现文件上传到oss服务器中。
@RequestPart:主要依赖于该注解,标识multipart/form-data表单提交。
- 支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的
- @RequestParam也同样支持multipart/form-data请求。
- 他们最大的不同是,当请求方法的请求参数类型不再是String类型的时候。
- @RequestParam适用于name-valueString类型的请求域,@RequestPart适用于复杂的请求域(像JSON,XML)
定义openFeign客户端接口
@FeignClient(value="zlhouse-sys")publicinterfaceSysOssService{@PostMapping(value="/app/feignUpload", consumes= MediaType.MULTIPART_FORM_DATA_VALUE)
StringfeignUpload(@RequestPart("file") MultipartFile file);}
消费者调用控制器
@RestController@RequestMapping("/contract")@Slf4jpublicclassContractController{@Resourceprivate SysOssService sysOssService;@PostMapping("/upload")public StringtestFileUpload(@RequestPart("file") MultipartFile file){
System.out.println("开始文件上传"+ file);
String s= sysOssService.feignUpload(file);
System.out.println("执行完毕"+ s);return sysOssService.feignUpload(file);}}
执行结果

关于微服务通过openfeign实现服务之间相互调用实现文件上传就给大家介绍到这里,如有不足或其他问题欢迎在下方指出,感谢阅读本文章。