Spring Cloud Feign的文件上传实现
福利持续进行中,免费加入知识星球和斐讯K3抽奖等你来!!!
在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本文就来具体说说如何实现。
服务提供方(接收文件)
服务提供方的实现比较简单,就按Spring MVC的正常实现方式即可,比如:
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
@RestController
public 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);
@Configuration
class MultipartSupportConfig {
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder();
}
}
}
在启动了服务提供方之后,尝试在服务消费方编写测试用例来通过上面定义的Feign客户端来传文件,比如:
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UploadTester {
@Autowired
private UploadService uploadService;
@Test
@SneakyThrows
public 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));
}
}
完整示例:
读者可以根据喜好选择下面的两个仓库中查看 eureka-feign-upload-server
和 eureka-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的文件上传实现相关推荐
- java B2B2C 仿淘宝电子商城系统-Spring Cloud Feign的文件上传实现
在Spring Cloud封装的Feign中并不直接支持传文件,但可以通过引入Feign的扩展包来实现,本文就来具体说说如何实现.需要JAVA Spring Cloud大型企业分布式微服务云构建的B2 ...
- 关于Spring Cloud Zuul网管上传文件乱码问题
Spring Cloud Zuul现在对于上传文件有两种处理方式,一种是用spring mvc,另一种是zuulServlet.spring mvc对文件处理不是很好,会导致乱码问题,zuulServ ...
- Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)
概述 测试 源码 概述 Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload) 上篇博文我们说了基于Apache Commons FileUpload的 ...
- 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
作者:ssslinppp 1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...
- Spring MVC-09循序渐进之文件上传(基于Servlet3.0+Html5客户端上传文件)
示例 测试 源码 虽然Servlet3.0+中上传文件,我们在服务端编程即可非常容易,但是用户体验却不是非常友好.单独的一个HTML表单并不能显示进度条,或者显示已经成功上传的文件数量. 不管是Jav ...
- Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload)
概述 客户端编程 MultipartFile接口 利用Commons FileUpload上传文件 Domain类 控制器 配置文件 JSP页面 部署及测试 源码 概述 Servlet出现之前,文件上 ...
- Spring Boot入门——多文件上传大小超限问题解决
多文件上传中遇到上传文件大小的问题 org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededExcepti ...
- java spring文件下载_SpringMVC实现文件上传和下载的工具类
本文主要目的是记录自己基于SpringMVC实现的文件上传和下载的工具类的编写,代码经过测试可以直接运行在以后的项目中. 开发的主要思路是对上传和下载文件进行抽象,把上传和下载的核心功能抽取出来分装成 ...
- Spring中MultipartHttpServletRequest实现文件上传
2019独角兽企业重金招聘Python工程师标准>>> 转贴自:http://zhupan.iteye.com/blog/26427 实现图片上传 用户必须能够上传图片,因此需要文 ...
最新文章
- 鼠标同步桌面_[问题处理]XenCenter控制台操作通过MCS发布的虚拟机鼠标不同步
- iOSUI视图面试及原理总结
- 数据分析、机器学习必读书,李航《统计学习方法》发布算法推导视频啦!(附作业讲解)...
- initializeCachedDB function in JavaScript - how is the call delegated to
- 鸿蒙硬件HI3861-连接WIFI
- Django视图层:URL的反向解析(主路由include之namespace,子路由之name,模板标签{%url%},视图reverse()函数,反向解析示例,URL命名空间
- GreenSock (TweenMax) 动画案例(一)
- 基于51单片机的避障小车
- 怎么批量修改pdf文件名?
- 如何在线查询学历证书
- 如何用蓝牙网关广播蓝牙数据
- 上海房产税免征--积分或居住证
- PS-怎么用ps查看精灵图(雪碧图)的位置?
- mac下的c语言贪吃蛇
- onlyoffice转换html,CentOS7安装onlyoffice实现word的在线预览和编辑
- 我的Docker学习笔记:从入门到实战过程全记录
- java % 负数_Java如何在括号中显示负数?
- Jackson之JSON序列化和多态反序列化
- [洛谷P3758][TJOI2017]可乐
- 痞子衡嵌入式:实测i.MXRT1010上的普通GPIO与高速GPIO极限翻转频率
热门文章
- Linux Rootkit 系列四:对于系统调用挂钩方法的补充
- 后门BROOTKIT代码学习和原理分析
- linux下configure命令详解
- 设备驱动程序INF文件——INF文件的节
- 戴尔服务器远程访问管理卡iDRAC 7详解
- Android 网络操作常用的两个类
- Ubuntu 安装open office
- 爬虫找工作要掌握什么_数据分析师要掌握SQL到什么程度?
- r语言导入ggplot2_R语言 可视化之三大绘图系统概述:base、lattice和ggplot2 | 第7讲...
- Problem 63 何时该用glDrawTexiOES?