专栏首页A周立SpringCloud使用Spring Cloud Feign上传文件

使用Spring Cloud Feign上传文件

最近经常有人问Spring Cloud Feign如何上传文件。有团队的新成员,也有其他公司的兄弟。本文简单做个总结——

早期的Spring Cloud中,Feign本身是没有上传文件的能力的(1年之前),要想实现这一点,需要自己去编写 Encoder 去实现上传。现在我们幸福了很多。因为Feign官方提供了子项目feign-form ,其中实现了上传所需的 Encoder

注:笔者测试的版本是Edgware.RELEASE。Camden、Dalston同样适应本文所述。

加依赖

<dependency>
    <groupId>io.github.openfeign.form</groupId>
    <artifactId>feign-form</artifactId>
    <version>3.0.3</version>
</dependency>
<dependency>
    <groupId>io.github.openfeign.form</groupId>
    <artifactId>feign-form-spring</artifactId>
    <version>3.0.3</version>
</dependency>

编写Feign Client

@FeignClient(name = "ms-content-sample", configuration = UploadFeignClient.MultipartSupportConfig.class)
public interface UploadFeignClient {
    @RequestMapping(value = "/upload", method = RequestMethod.POST,
            produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},
            consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @ResponseBody
    String handleFileUpload(@RequestPart(value = "file") MultipartFile file);

    class MultipartSupportConfig {
        @Bean
        public Encoder feignFormEncoder() {
            return new SpringFormEncoder();
        }
    }
}

如代码所示,在这个Feign Client中,我们引用了配置类 MultipartSupportConfig ,在 MultipartSupportConfig 中,我们实例化了 SpringFormEncoder 。这样这个Feign Client就能够上传啦。

注意点

  • @RequestMapping(...) 中的 produecesconsumes 不能少;
  • 接口定义中的注解 @RequestPart(value="file") 不能写成 @RequestParam(value="file"
  • 最好将Hystrix的超时时间设长一点,例如5秒,否则可能文件还没上传完,Hystrix就超时了,从而导致客户端侧的报错。

本文分享自微信公众号 - A周立SpringCloud(gh_e6849e368b5f),作者:周立

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker系列教程22-docker-compose.yml常用命令

    用户1516716
  • 如何提高代码质量

    说起代码质量,脑子里会冒出很多词,命名规范、格式规范、日志规范、单元测试覆盖率...

    用户1516716
  • Spring官方宣布Netflix项目进入维护模式解读后续

    没有商业化利益驱动的开源难以持久,只看利益的开源也难以持久和做大。而在这个角度,Netflix Eureka和Hystrix项目的停止发展,以及近期Spring...

    用户1516716
  • [解读REST] 5.Web的需求 & 推导REST

    衔接上文[解读REST] 4.基于网络应用的架构风格,上文总结了一些适用于基于网络应用的架构风格,以及其评估结果。在前文的基础上,本文介绍一下Web架构的需求,...

    blackheart
  • 从零开发Spring Boot微信点餐后台(更新 ing)1 架构简介2 项目设计3

    JavaEdge
  • 联合国发布用于反恐的生物识别最佳实践手册

    反恐斗争中生物识别技术的应用不断扩大,联合国正采取措施对此进行监管,发布了一份参考指南,名为“联合国关于反恐斗争中负责任地使用与分享生物识别技术的建议实践概要”...

    人工智能快报
  • 微软Office Powerpoint双击打不开后的修复办法

    我最近经常遇到,双击一个ppt后,没有任何反应,也没有看到打开的powerpoint。

    Jerry Wang
  • 儿童节|你和你的孩子都该警惕的超级盐弹

    大数据文摘
  • 漫画 | 架构设计中的那些事

    刚进入架构师角色的时候会有很多迷惑不解的地方,不同于以往做开发,架构师关注点会更上层一些,需要提前识别出问题,并制定解决方案。因此不仅仅需要技术的深度和广度,还...

    码农神说
  • 聚类方法的区别解读:各种聚类分析呀呀呀

    k 均值聚类法 快速高效,特别是大量数据时,准确性高一些,但是需要你自己指定聚类的类别数量 系统聚类法则是系统自己根据数据之间的距离来自动列出类别,所以通过系统...

    学到老

扫码关注云+社区

领取腾讯云代金券