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 的文件上传搞定了

以上仅仅是小编在使用过程中遇到问题的解决办法, 如果小伙伴另有其他问题,可以留言共同讨论解决!!

望大神指教!!

posted @ 2018-08-16 17:22  chbyiming  阅读(373)  评论(0编辑  收藏  举报