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

原文:http://blog.didispace.com/spring-cloud-starter-dalston-2-4/

服务提供方(接收文件)

服务提供方的实现比较简单,就按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两个项目:

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

Spring Cloud Feign的文件上传实现的更多相关文章

  1. Spring Cloud Zuul 中文文件上传乱码

    原文地址:https://segmentfault.com/a/1190000011650034 1 描述 使用Spring Cloud Zuul进行路由转发时候吗,文件上传会造成中文乱码“?”.1. ...

  2. Feign实现文件上传下载

    Feign框架对于文件上传消息体格式并没有做原生支持,需要集成模块feign-form来实现. 独立使用Feign 添加模块依赖: <!-- Feign框架核心 --> <depen ...

  3. Spring中MultipartHttpServletRequest实现文件上传

    Spring中MultipartHttpServletRequest实现文件上传 转贴自:http://my.oschina.net/nyniuch/blog/185266 实现图片上传  用户必须能 ...

  4. 关于我使用spring mvc框架做文件上传时遇到的问题

    非常感谢作者 原文:https://blog.csdn.net/lingirl/article/details/1714806 昨天尝试着用spring mvc框架做文件上传,犯了挺多不该犯的毛病问题 ...

  5. 利用spring的MultipartFile实现文件上传【原】

    利用spring的MultipartFile实现文件上传 主要依赖jar包 spring-web-3.0.6.RELEASE.jar 用到 (org.springframework.web.multi ...

  6. Spring MVC-从零开始-文件上传(未完待续)

    Spring MVC-从零开始-文件上传(未完待续)

  7. feign多文件上传

    参考地址:https://www.cnblogs.com/standup/p/9090113.html https://www.cnblogs.com/standup/p/9093753.html 1 ...

  8. Feign【文件上传】

    话不多说,上代码.... 项目公共依赖配置: <parent> <groupId>org.springframework.boot</groupId> <ar ...

  9. Feign进行文件上传+表单调用

    Feigin默认是不支持文件上传和表单提交的,需要做一些配置才能支持. 1.feign依赖 图中红色为form支持必须的jar. 2.添加自定义Encoder类: import static java ...

随机推荐

  1. Mybatis 系列8

    上篇系列7 介绍了insert.update.delete的用法, 本篇将介绍select.resultMap的用法. select无疑是我们最常用,也是最复杂的,mybatis通过resultMap ...

  2. Mybatis 系列6

    上篇系列5中 简单看了一下TypeHandler, 本次将结束对于mybatis的配置文件的学习, 本次涉及到剩下没提及到的几个节点的配置:objectFactory.databaseIdProvid ...

  3. 利用HTML5,前端js实现图片压缩

    http://blog.csdn.NET/qazwsx2345/article/details/21827553 主要用了两个HTML5的 API,一个file,一个canvas,压缩主要使用cnav ...

  4. python importlib动态导入模块

    一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过import module 或者 from * import module的方式导入,这属于静态导入,很容易理解. 而 ...

  5. 分享一下在aspx页面弹框的设置代码

    public static class MessageBox { /// <summary> /// 显示消息提示对话框 /// </summary> /// <para ...

  6. Nginx服务器导致CSS无法解析不起效果

    最近部署一个项目html,js正常加载,css也没有报404,css能够正常获取,只是浏览器无法解析,研究了一下发现,原来是配置Nginx的时候将/etc/nginx/nginx.conf的一行inc ...

  7. 《与C语言相恋》

    第一章 <与C语言相恋> 目录: 1.1 C语言的诞生 1.2 相恋C语言的理由 1.3 相恋C语言的7个步骤 1.4 目标代码文件,可执行文件和库 1.5 本章小结 C语言的诞生 197 ...

  8. C# DataGridView绑定List对象时,利用BindingList来实现增删查改

    当DataGridView的DataSource是DataTable的时候,DataTable的数据改变时,DataGridView的数据会随之改变,无需重新绑定到DataGridView.  当Da ...

  9. Windows安装TensorFlow

    1.下载安装Anaconda 官方地址:https://www.continuum.io/downloads/镜像地址:https://mirrors.tuna.tsinghua.edu.cn/ana ...

  10. PAT1097:Deduplication on a Linked List

    1097. Deduplication on a Linked List (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 ...