Spring Cloud Feign的文件上传实现的示例代码

 更新时间:2018年03月22日 09:32:32   作者:翟永超  
这篇文章主要介绍了Spring Cloud Feign的文件上传实现的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

服务提供方(接收文件)

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

@RestController
public class UploadController {

  @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  public String handleFileUpload(@RequestPart(value = "file") MultipartFile file) {
    return file.getName();
  }
  
}

服务消费方(发送文件)

在服务消费方由于会使用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>
</dependency>

定义FeignClient,假设服务提供方的服务名为 upload-server

@FeignClient(value = "upload-server", configuration = TestServiceClient.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客户端来传文件,比如:

@Test
@SneakyThrows
public void testHandleFileUpload() { 
  File file = new File("files/aaa.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(testServiceClient.handleFileUpload(multi));
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java中String、StringBuffer、StringBuilder的区别详解

    Java中String、StringBuffer、StringBuilder的区别详解

    java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,他们之间有什么区别呢?下面小编给大家总结了Java中String、StringBuffer、StringBuilder的区别详解,需要的朋友参考下吧
    2016-06-06
  • Java项目实战之在线考试系统的实现(系统介绍)

    Java项目实战之在线考试系统的实现(系统介绍)

    这篇文章主要介绍了Java项目实战之在线考试系统的实现(系统介绍),本文通过实例代码,截图的形式给大家展示系统技术架构,需要的朋友可以参考下
    2020-02-02
  • Java 数据结构与算法系列精讲之KMP算法

    Java 数据结构与算法系列精讲之KMP算法

    在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己的语言来把这个算法的一些细节梳理清楚,也算是考验一下自己有真正理解这个算法
    2022-02-02
  • springSecurity之如何添加自定义过滤器

    springSecurity之如何添加自定义过滤器

    这篇文章主要介绍了springSecurity之如何添加自定义过滤器的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • springboot vue接口测试定义编辑功能的实现

    springboot vue接口测试定义编辑功能的实现

    这篇文章主要为大家介绍了springboot vue接口测试定义编辑功能的实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Java 泛型详解与范例

    Java 泛型详解与范例

    hello !大家好!今天的主题就是:泛型。在使用集合类时,大家就已经接触到泛型了,那就是每个集合类后面的尖括号<>,这样一对尖括号,在java中就称为泛型。那么泛型这一个点,我们又该知道多少呢?我们往下看
    2021-11-11
  • Java使用注解实现防止重复提交实例

    Java使用注解实现防止重复提交实例

    这篇文章主要介绍了Java使用注解实现防止重复提交实例,在一些项目中由于用户误操作,多次点击表单提交按钮,会产生很多次的数据交互,为了解决这一问题,本文使用注解来实现防止重复提交,需要的朋友可以参考下
    2023-07-07
  • Spring整合mybatis、springMVC总结

    Spring整合mybatis、springMVC总结

    这篇文章主要为大家详细介绍了Java整合Mybatis,SpringMVC,文中有详细的代码示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-05-05
  • eclipse 安装lombok插件

    eclipse 安装lombok插件

    这篇文章主要介绍了eclipse 安装lombok插件的详细步骤,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • 关于mybatis使用${}时sql注入的问题

    关于mybatis使用${}时sql注入的问题

    这篇文章主要介绍了关于mybatis使用${}时sql注入的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论