福利持续进行中,免费加入知识星球和斐讯K3抽奖等你来!!!

在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本文就来具体说说如何实现。

服务提供方(接收文件)

服务提供方的实现比较简单,就按Spring MVC的正常实现方式即可,比如:

  1. @EnableFeignClients

  2. @EnableDiscoveryClient

  3. @SpringBootApplication

  4. public class Application {

  5.    @RestController

  6.    public class UploadController {

  7.        @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

  8.        public String handleFileUpload(@RequestPart(value = "file") MultipartFile file) {

  9.            return file.getName();

  10.        }

  11.    }

  12.    public static void main(String[] args) {

  13.        new SpringApplicationBuilder(Application.class).web(true).run(args);

  14.    }

  15. }

服务消费方(发送文件)

在服务消费方由于会使用Feign客户端,所以在这里需要在引入feign对表单提交的依赖,具体如下:

  1. <dependency>

  2.   <groupId>io.github.openfeign.form</groupId>

  3.   <artifactId>feign-form</artifactId>

  4.   <version>3.0.3</version>

  5. </dependency>

  6. <dependency>

  7.   <groupId>io.github.openfeign.form</groupId>

  8.   <artifactId>feign-form-spring</artifactId>

  9.   <version>3.0.3</version>

  10. </dependency>

  11. <dependency>

  12.   <groupId>commons-fileupload</groupId>

  13.   <artifactId>commons-fileupload</artifactId>

  14.   <version>1.3.3</version>

  15. </dependency>

定义文件上传方的应用主类和FeignClient,假设服务提供方的服务名为 eureka-feign-upload-server

  1. @EnableFeignClients

  2. @EnableDiscoveryClient

  3. @SpringBootApplication

  4. public class Application {

  5.    public static void main(String[] args) {

  6.        new SpringApplicationBuilder(Application.class).web(true).run(args);

  7.    }

  8. }

  9. @FeignClient(value = "upload-server", configuration = UploadService.MultipartSupportConfig.class)

  10. public interface UploadService {

  11.    @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

  12.    String handleFileUpload(@RequestPart(value = "file") MultipartFile file);

  13.    @Configuration

  14.    class MultipartSupportConfig {

  15.        @Bean

  16.        public Encoder feignFormEncoder() {

  17.            return new SpringFormEncoder();

  18.        }

  19.    }

  20. }

在启动了服务提供方之后,尝试在服务消费方编写测试用例来通过上面定义的Feign客户端来传文件,比如:

  1. @Slf4j

  2. @RunWith(SpringJUnit4ClassRunner.class)

  3. @SpringBootTest

  4. public class UploadTester {

  5.    @Autowired

  6.    private UploadService uploadService;

  7.    @Test

  8.    @SneakyThrows

  9.    public void testHandleFileUpload() {

  10.        File file = new File("upload.txt");

  11.        DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",

  12.                MediaType.TEXT_PLAIN_VALUE, true, file.getName());

  13.        try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) {

  14.            IOUtils.copy(input, os);

  15.        } catch (Exception e) {

  16.            throw new IllegalArgumentException("Invalid file: " + e, e);

  17.        }

  18.        MultipartFile multi = new CommonsMultipartFile(fileItem);

  19.        log.info(uploadService.handleFileUpload(multi));

  20.    }

  21. }

完整示例:

读者可以根据喜好选择下面的两个仓库中查看 eureka-feign-upload-servereureka-feign-upload-client两个项目:

  • Github:https://github.com/dyc87112/SpringCloud-Learning/

  • Gitee:https://gitee.com/didispace/SpringCloud-Learning/

如果您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!

福利持续进行中,免费加入知识星球和斐讯K3抽奖等你来!!!

推荐阅读

  • 如何在Spring Boot中玩转智能合约【修订版】

  • Spring Boot中增强对MongoDB的配置(连接池等)

  • Spring Boot 与 OAuth2

  • Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent

  • Spring Boot 2.0 新特性(一):配置绑定 2.0 全解析

  • Spring Boot 2.0正式发布,升还是不升呢?

  • Spring Boot 2.0 新特性概览

  • Spring Boot/Cloud干货汇总

  • Spring Cloud Gateway真的有那么差吗?

长按指纹

一键关注



深入交流、更多福利

扫码加入我的知识星球


点击 “阅读原文” 看看本号其他精彩内容

Spring Cloud Feign的文件上传实现相关推荐

  1. java B2B2C 仿淘宝电子商城系统-Spring Cloud Feign的文件上传实现

    在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本文就来具体说说如何实现.需要JAVA Spring Cloud大型企业分布式微服务云构建的B2 ...

  2. 关于Spring Cloud Zuul网管上传文件乱码问题

    Spring Cloud Zuul现在对于上传文件有两种处理方式,一种是用spring mvc,另一种是zuulServlet.spring mvc对文件处理不是很好,会导致乱码问题,zuulServ ...

  3. Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)

    概述 测试 源码 概述 Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload) 上篇博文我们说了基于Apache Commons FileUpload的 ...

  4. 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传

    作者:ssslinppp       1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...

  5. Spring MVC-09循序渐进之文件上传(基于Servlet3.0+Html5客户端上传文件)

    示例 测试 源码 虽然Servlet3.0+中上传文件,我们在服务端编程即可非常容易,但是用户体验却不是非常友好.单独的一个HTML表单并不能显示进度条,或者显示已经成功上传的文件数量. 不管是Jav ...

  6. Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload)

    概述 客户端编程 MultipartFile接口 利用Commons FileUpload上传文件 Domain类 控制器 配置文件 JSP页面 部署及测试 源码 概述 Servlet出现之前,文件上 ...

  7. Spring Boot入门——多文件上传大小超限问题解决

    多文件上传中遇到上传文件大小的问题 org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededExcepti ...

  8. java spring文件下载_SpringMVC实现文件上传和下载的工具类

    本文主要目的是记录自己基于SpringMVC实现的文件上传和下载的工具类的编写,代码经过测试可以直接运行在以后的项目中. 开发的主要思路是对上传和下载文件进行抽象,把上传和下载的核心功能抽取出来分装成 ...

  9. Spring中MultipartHttpServletRequest实现文件上传

    2019独角兽企业重金招聘Python工程师标准>>> 转贴自:http://zhupan.iteye.com/blog/26427 实现图片上传  用户必须能够上传图片,因此需要文 ...

最新文章

  1. 鼠标同步桌面_[问题处理]XenCenter控制台操作通过MCS发布的虚拟机鼠标不同步
  2. iOSUI视图面试及原理总结
  3. 数据分析、机器学习必读书,李航《统计学习方法》发布算法推导视频啦!(附作业讲解)...
  4. initializeCachedDB function in JavaScript - how is the call delegated to
  5. 鸿蒙硬件HI3861-连接WIFI
  6. Django视图层:URL的反向解析(主路由include之namespace,子路由之name,模板标签{%url%},视图reverse()函数,反向解析示例,URL命名空间
  7. GreenSock (TweenMax) 动画案例(一)
  8. 基于51单片机的避障小车
  9. 怎么批量修改pdf文件名?
  10. 如何在线查询学历证书
  11. 如何用蓝牙网关广播蓝牙数据
  12. 上海房产税免征--积分或居住证
  13. PS-怎么用ps查看精灵图(雪碧图)的位置?
  14. mac下的c语言贪吃蛇
  15. onlyoffice转换html,CentOS7安装onlyoffice实现word的在线预览和编辑
  16. 我的Docker学习笔记:从入门到实战过程全记录
  17. java % 负数_Java如何在括号中显示负数?
  18. Jackson之JSON序列化和多态反序列化
  19. [洛谷P3758][TJOI2017]可乐
  20. 痞子衡嵌入式:实测i.MXRT1010上的普通GPIO与高速GPIO极限翻转频率

热门文章

  1. Linux Rootkit 系列四:对于系统调用挂钩方法的补充
  2. 后门BROOTKIT代码学习和原理分析
  3. linux下configure命令详解
  4. 设备驱动程序INF文件——INF文件的节
  5. 戴尔服务器远程访问管理卡iDRAC 7详解
  6. Android 网络操作常用的两个类
  7. Ubuntu 安装open office
  8. 爬虫找工作要掌握什么_数据分析师要掌握SQL到什么程度?
  9. r语言导入ggplot2_R语言 可视化之三大绘图系统概述:base、lattice和ggplot2 | 第7讲...
  10. Problem 63 何时该用glDrawTexiOES?