好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

springcloud如何使用Feign后台内部传递MultipartFile

如何使用Feign后台内部传递MultipartFile

先修改Feign Client接口

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

import feign.codec.Encoder;

import feign.form.spring.SpringFormEncoder;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.context.annotation.Bean;

import org.springframework.http.MediaType;

import org.springframework.web.bind.annotation.DeleteMapping;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RequestPart;

import org.springframework.web.multipart.MultipartFile;

 

/**

  * @author linli

  * @date 20-06-27

  */

@FeignClient (value = "upload" , fallbackFactory = UploadFallbackFactory. class , configuration = UploadClient.MultipartSupportConfig. class )

public interface UploadClient {

 

     @PostMapping (path = "/upload-text" , consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

     String uploadText( @RequestPart (name = "file" ) MultipartFile file);

 

     /**

      * 引用配置类MultipartSupportConfig.并且实例化

      */

     class MultipartSupportConfig {

         @Bean

         public Encoder feignFormEncoder() {

             return new SpringFormEncoder();

         }

     }

}

若SpringFormEncoder 引入报错,加上下面的依赖

?

1

2

3

4

5

6

7

8

9

10

< dependency >

     < groupId >io.github.openfeign.form</ groupId >

     < artifactId >feign-form</ artifactId >

     < version >3.3.0</ version >

</ dependency >

< dependency >

     < groupId >io.github.openfeign.form</ groupId >

     < artifactId >feign-form-spring</ artifactId >

     < version >3.3.0</ version >

</ dependency >

内部调用

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

private String uploadFile(String str) {

         FileOutputStream fos = null ;

         FileInputStream fis = null ;

         MultipartFile multipartFile = null ;

         byte [] bt = str.getBytes();

         File file = null ;

         try {

             file = File.createTempFile( "file" + UUID.randomUUID(), ".txt" );

             fos = new FileOutputStream(file);

             fos.write(bt, 0 , bt.length);

             fis = new FileInputStream(file);

             multipartFile = new MockMultipartFile( "file" , file.getName(),

                     MediaType.TEXT_PLAIN_VALUE, fis);

         } catch (FileNotFoundException e) {

             e.printStackTrace();

         } catch (IOException e) {

             e.printStackTrace();

         } finally {

             if (fis != null ) {

                 try {

                     fis.close();

                 } catch (IOException e) {

                     e.printStackTrace();

                 }

             }

             if (fos != null ) {

                 try {

                     fos.close();

                 } catch (IOException e) {

                     e.printStackTrace();

                 }

             }

         }

         return uploadClient.uploadText(multipartFile);

     }

注意点

Feign进行跨服务传递MultipartFile文件

通过调用服务进行文件上传,避免每个需要上传文件的模块都写一遍上传服务,造成代码冗余。

本文主要包含通过feign进行文件上传模块。

使技术人员在开发过程中遇到问题时有地可查,有章可循。

通过feign进行跨服务传递MultipartFile文件

添加依赖

?

1

2

3

4

5

6

7

8

9

10

< 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 >

添加配置文件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package com.ruiyi.twowayreferral.configurer;

import feign.codec.Encoder;

import feign.form.spring.SpringFormEncoder;

import org.springframework.beans.factory.ObjectFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.autoconfigure.http.HttpMessageConverters;

import org.springframework.cloud.openfeign.support.SpringEncoder;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class MultipartSupportConfig {

    @Autowired

    private ObjectFactory<HttpMessageConverters> messageConverters;

    @Bean

    public Encoder feignFormEncoder() {

        return new SpringFormEncoder( new SpringEncoder(messageConverters));

    }

}

代码示例

?

1

2

3

4

5

6

7

8

9

10

11

@FeignClient (value = "controller-center" )

public interface CallFrignService {

    /**

      * @Create 文件上传 wanggx_ruiyi 2019.11.15

      * @param uploadPath 文件上传地址

      * @param file 上传的文件

      * @return

      */

    @PostMapping (value = "/api/v1/common/file/fileUpload" ,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

    String fileUpload( @RequestParam (value = "uploadPath" , required = true ) String uploadPath, @RequestPart (value = "file" , required = true ) MultipartFile file);

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/linli1991/article/details/107016055

查看更多关于springcloud如何使用Feign后台内部传递MultipartFile的详细内容...

  阅读:21次