SpringCloud如何通过Feign传输文件


theme: smartblue

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

写在前面

Feign是微服务中服务间调用的优选组件,后来的OpenFeign也是基于此来开展的。

我会创建一个新的专栏,来保存我最近使用Feign的一些心得和问题点,欢迎大家关注。

为什么要通过Feign来传输文件?

我为什么要用Feign来传输文件,是因为在我目前的微服务框架中,文件存储的服务是独立分开的。

所以要保存文件到FTP或者其他静态资源服务器上,只能通过文件服务。

解决方案

shen说要有API,于是就有了如下API。

java @PostMapping(value = "/upload") public FileVO uploadFile(@RequestParam(value = "file") MultipartFile file){ return fileService.saveFile(file); }

API的编写和普通的controller接口一样,没有区别。

接着就是要有feign调用接口,于是有了如下Feign接口。

java /** * @param file * @return */ @PostMapping(value = "/file/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) GlobalFileVO uploadFile(@RequestPart(value = "file") MultipartFile file);

这里的feign接口需要极其特别注意的就是@RequestPart这个注解。

而且还需要声明PostMapping的consumes参数。

必须要使用这个注解,只有这个注解才能将文件传输到其他服务。

准备工作已完成,如何在业务代码中调用呢?

其实到这,大家在网上都能找到相似的问题解决办法。

相反调用的地方很多博客给出的答案并不灵活,如果你没找到其他的解决方案,那么我这个方法可能符合你的要求。

其实这里feign接口是需要一个MultipartFile对象。

MultipartFile本身又只是一个接口,这个时候就要选择实现MultipartFile接口的哪个实现类呢?哪个实现类又能符合我们的要求。

我给出的答案就是实现MockMultipartFile类。

通过这个类的实现,我们可以填充文件流、字节流、字节数组、文件名称都可以。

我给一个大概的代码实现,大家可以自行查看其源码,很清晰很容易就能看懂。

image.png

需要先引入下面这个包才行。

xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency>

java byte[] buffer = null; // ....... // MultipartFile file = new MockMultipartFile("文件名称", "文件名称.jpeg", ContentType.MULTIPART_FORM_DATA.toString(), buffer); return fileFeign.uploadFile(file);

这里需要指定ContentType,我在ContentType常量类中找到这个类型。

期间我遇到了哪些问题?

我当然也搜了一下别人都是如何实现的,但大多都是重复的帖子。

而且都是直接给出MultipartFile对象,或者是使用CommonsMultipartFile实现类。

CommonsMultipartFile这个类需要传输FileItem对象,当然这个方法也可以。

但总感觉不是很方便,所以才通过new的提示找到了MockMultipartFile实现类。

总结

Feign的文件传输并不常用,但是往往只用上一两次的功能,才是最重要的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ijiran

一杯咖啡太贵,一块糖就可以

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值