好得很程序员自学网

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

FeignMultipartSupportConfig上传图片配置方式

FeignMultipartSupportConfig上传图片配置

在对应的boot项目上关闭全局的上传图片的配置

?

1

2

3

4

5

6

7

8

9

10

11

@SpringBootApplication

@EnableCircuitBreaker

@EnableEurekaClient

@EnableFeignClients

@ComponentScan (excludeFilters = { @ComponentScan .Filter(type = FilterType.ASSIGNABLE_TYPE,value = FeignMultipartSupportConfig. class )})

public class BootstrapApplication {

 

    public static void main(String[] args) {

      SpringApplication.run(BootstrapApplication. class , args);

    }

}

在目标feign上面添加

?

1

2

3

4

5

6

@FeignClient (name = "micro-picture" , fallbackFactory = MicroPictureFactory. class , configuration = FeignMultipartSupportConfig. class )

public interface MicroPictureClient {

@RequestMapping (value = { "/picture/common/upload/{commonKey}" }, method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

    public String upload( @RequestPart ( "image" ) MultipartFile image, @PathVariable ( "commonKey" ) Long commonKey);

   

}

就可以实现对应的服务做图片的上传,针对的图片微服务就可以实现数据的额接收。

对应配置文件的代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

@Configuration

public class FeignMultipartSupportConfig {

    @Bean

    @Primary

    @Scope ( "prototype" )

    public Encoder multipartFormEncoder() {

      return new FeignSpringFormEncoder();

    }

    @Bean

    public feign.Logger.Level multipartLoggerLevel() {

      return feign.Logger.Level.FULL;

    }

}

?

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

36

37

38

39

40

41

42

43

44

package com.zhht.config;

import feign.RequestTemplate;

import feign.codec.EncodeException;

import feign.codec.Encoder;

import feign.form.ContentType;

import feign.form.FormEncoder;

import feign.form.MultipartFormContentProcessor;

import feign.form.spring.SpringManyMultipartFilesWriter;

import feign.form.spring.SpringSingleMultipartFileWriter;

import org.springframework.web.multipart.MultipartFile;

import java.lang.reflect.Type;

import java.util.Collections;

import java.util.Map;

public class FeignSpringFormEncoder extends FormEncoder {

   

    public FeignSpringFormEncoder() {

      this ( new Default());

    }

    public FeignSpringFormEncoder(Encoder delegate) {

      super (delegate);

      MultipartFormContentProcessor processor = (MultipartFormContentProcessor) this

            .getContentProcessor(ContentType.MULTIPART);

      processor.addWriter( new SpringSingleMultipartFileWriter());

      processor.addWriter( new SpringManyMultipartFilesWriter());

    }

    public void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException {

      if (bodyType.equals(MultipartFile. class )) {

          MultipartFile file = (MultipartFile) object;

          if (file != null ) {

            Map<String, Object> data = Collections.singletonMap( "image" , object);

            super .encode(data, MAP_STRING_WILDCARD, template);

            return ;

          }

      } else if (bodyType.equals(MultipartFile[]. class )) {

          MultipartFile[] file = (MultipartFile[]) object;

          if (file != null ) {

            Map<String, Object> data = Collections.singletonMap( "imgList" , object);

            super .encode(data, MAP_STRING_WILDCARD, template);

            return ;

          }

      }

      super .encode(object, bodyType, template);

    }

}

如何使用Feign上传图片

添加依赖,支持SpringEncoder

?

1

2

3

4

5

6

7

8

9

10

        < dependency >

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

            < artifactId >feign-form</ artifactId >

            < version >3.4.1</ version >

        </ dependency >

        < dependency >

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

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

            < version >3.4.1</ version >

        </ dependency >

将SpringFormEncoder的默认处理

encoder配置为SpringEncoder

?

1

2

3

4

5

6

7

@Configuration

public class FeignMultipartSupportConfig {

    @Bean

    public Encoder multipartFormEncoder(ObjectFactory<HttpMessageConverters> messageConverters) {

        return new SpringFormEncoder( new SpringEncoder(messageConverters));

    }

}

编写client

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

@FeignClient (value = "****" ,

        fallbackFactory = UploadClientFallbackFactory. class

        , configuration = FeignMultipartSupportConfig. class

)

public interface UploadClient {

    /**

      * 上传图片文件

      *

      * @param file

      * @return

      */

    @PostMapping (value = "/tbk/feedback/upload" ,

            produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},

            consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

    BaseResponse<String> uploadImage( @RequestPart ( "file" ) MultipartFile file);

}

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

原文链接:https://blog.csdn.net/achen0001/article/details/85252141

查看更多关于FeignMultipartSupportConfig上传图片配置方式的详细内容...

  阅读:23次