在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本文就来具体说说如何实现。需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六

服务提供方(接收文件)

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

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Application {@RestControllerpublic class UploadController {@PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)public String handleFileUpload(@RequestPart(value = "file") MultipartFile file) {return file.getName();}}public static void main(String[] args) {new SpringApplicationBuilder(Application.class).web(true).run(args);}}
复制代码

服务消费方(发送文件)

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

<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>
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version>
</dependency>
复制代码

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

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Application {public static void main(String[] args) {new SpringApplicationBuilder(Application.class).web(true).run(args);}}@FeignClient(value = "upload-server", configuration = UploadService.MultipartSupportConfig.class)
public interface UploadService {@PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)String handleFileUpload(@RequestPart(value = "file") MultipartFile file);@Configurationclass MultipartSupportConfig {@Beanpublic Encoder feignFormEncoder() {return new SpringFormEncoder();}}}
复制代码

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

@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UploadTester {@Autowiredprivate UploadService uploadService;@Test@SneakyThrowspublic void testHandleFileUpload() {File file = new File("upload.txt");DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",MediaType.TEXT_PLAIN_VALUE, true, file.getName());try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) {IOUtils.copy(input, os);} catch (Exception e) {throw new IllegalArgumentException("Invalid file: " + e, e);}MultipartFile multi = new CommonsMultipartFile(fileItem);log.info(uploadService.handleFileUpload(multi));}}
复制代码

java B2B2C 仿淘宝电子商城系统

转载于:https://juejin.im/post/5cb7d89ae51d456e46603e1e

java B2B2C 仿淘宝电子商城系统-Spring Cloud Feign的文件上传实现相关推荐

  1. java B2B2C 仿淘宝电子商城系统-Spring Cloud Eureka参数配置项详解

    Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能,下面对Eureka的配置项做具体介绍,供大家参考. 需要JA ...

  2. java B2B2C Springcloud仿淘宝电子商城系统-spring cloud 框架原理

    我们从整体来看一下Spring Cloud主要的组件,以及它的访问流程 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 1.外部或者 ...

  3. java B2B2C 仿淘宝电子商城系统-eureka 基础

    服务发现:Eureka客户端 服务发现是基于微服务架构的关键原则之一.尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱.Netflix服务发现服务器和客户端是Eureka.可以将服务器配置 ...

  4. java B2B2C 仿淘宝电子商城系统-基于Rabbitmq实现延迟消息

    预备知识 1.1 消息传递 首先我们知道消费者是从队列中获取消息的,那么消息是如何到达队列的? 当我们发送一条消息时,首先会发给交换器(exchange),交换器根据规则(路由键:routing ke ...

  5. java B2B2C Springcloud多租户电子商城系统-Spring Cloud Sleuth

    在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整 ...

  6. java B2B2C Springboot多租户电子商城系统-Spring Cloud Stream(消息驱动)

    1.什么是Spring Cloud Stream 愿意了解源码的朋友直接企鹅求求:二一四七七七五六三三 Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架.它可以基于 ...

  7. java B2B2C Springboot仿淘宝电子商城系统-负载均衡之ribbon+feign

    一. feign简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign注解和JAX-RS注 ...

  8. java B2B2C Springcloud仿淘宝电子商城系统

    Spring Cloud是基于Spring Boot的一整套实现微服务的框架.他提供了微服务开发所需的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策竞选.分布式会话和集群状态管理 ...

  9. (四)java B2B2C Springboot仿淘宝电子商城系统技术解决方案

    鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台.愿意了解源码的朋友直接求求交流分享技术:二一四 ...

最新文章

  1. cxf springmvc_拥抱模块化Java平台:Java 10上的Apache CXF
  2. python基础知识面试题-python的一些基本概念知识和面试题
  3. Spring学习五(JDBC支持)
  4. Linux 下 top 命令的使用详解
  5. 五种Linux桌面操作过程录制的文件
  6. MachineLearning:UFLDL学习笔记 ---- 主成分分析与白化
  7. 劲牌——业务流程管理方案
  8. 网络时间同步系统(NTP授时服务器)在电信网络的技术性应用研究
  9. day3--numpy
  10. SQLite的查询优化
  11. java中添加图片_java中添加图片的问题__ImageIcon_panel1_import_image1_useImage__169IT.COM
  12. 提取unity3d游戏资源文件
  13. Windows系统基础配置
  14. Android Layout inflate过程分析(1)
  15. shell通过ping实现ip检测
  16. 基于html+css的音乐网站网页设计
  17. eclipse java转class_Eclipse中的Java项目:无法解析java.lang.Object类型。 它是从所需的.class文件间接引用的...
  18. Android 来电秀总结
  19. 学生信息管理信息系统--添加窗体(学籍,课程,班级,成绩)问题汇总
  20. [导入]把域名转到了GoDaddy下

热门文章

  1. Windows Performance Toolkit
  2. 列出对象锁(lock)信息及其被杀的会话(sid,serial#)信息
  3. php autoload机制学习
  4. 解决maven找不到jdk的问题
  5. 半年没活动了,来活动一下
  6. Webpack学习-工作原理(上)
  7. #pragma once 是什么意思?
  8. Exchange Server 2007 移动邮件
  9. java多线程系类:基础篇:10生产者消费者的问题
  10. WEB测试—用户界面测试