欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-08-19 16:09:47
在spring cloud封装的feign中并不直接支持传文件,但可以通过引入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));
}

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