springcloud Feign 文件上传“坑”
经过小编一天的努力,终于把 springcloud feign 网关上传文件搞定
有可能是我使用的 springcloud 版本和网上解决方案的版本不一样,导致百度好久都没有找到结果。
先说一下问题的经过:
公司使用 springcloud 框架 搭建网关 后台实现无状态响应,使用 zuul 转发过滤请求,其他的都没问题,到文件上传时候遇到了问题,始终无法转到后台,网关一直在报各种各样的错,或者转到后台之后 MultipartFile 对象是 null
废话不多说,直接进入正题。。。。
- 首先需要在 maven pom 文件中加入 feign 的 jar
<dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.2.2</version> </dependency>
项目所使用 springcloud 版本是 1.5.12.RELEASE
- 在写好的文件上传网关接口中进行一些配置(@FeignClient)
在该接口中添加一个内部类或者在外面新写一个类(由于该类的配置是用来处理上传表单,小编就写在该类内部了)!
@Configuration class FileConfig { @Bean @Primary @Scope("prototype") public Encoder multipartFormEncoder() { return new SpringFormEncoder(); } }
下图
小编这个类是内部类
- 在 @FeignClient() 注解中添加 configuration
@FeignClient(value = "traffic-back", configuration = SlTrafficInterface.FileConfig.class)
下图
- 再来就是在接口定义的方法上做修改了,这里才是重点
@RequestMapping(value = "/file/up", method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) public String upload(@RequestPart("upFile") MultipartFile multipartFile);
下图
注意这里圈起来的两处,方法参数注解用 @RequestPart 该注解其实和 @RequestParam 作用类似,但是文件上传时,用处很大!!
再有就是 @RequestMapping() 注解中添加一个属性:consumes 值就是 "multipart/form-data" ,spring 中有这个常量
你感觉这就够了吗?
小编也不卖关子了,这是网关处的配置。。。
what??
没错的,后台接口也要配置,只需要一下下即可!!
- 配置后台接口,直接贴图
在后台这里,参数需要加上 @RequestParam 注解或者 @RequestPart 注解都可以,这样 MultipartFile 对象就不为空了!!
到此,就已经把 feign 的文件上传搞定了
以上仅仅是小编在使用过程中遇到问题的解决办法, 如果小伙伴另有其他问题,可以留言共同讨论解决!!
望大神指教!!