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