spring cloud —— feign文件上传
2020-12-13 04:16
标签:autowired exception lis core return back rgs 资料 多文件 最近项目中需要用feign调用cloud微服务实现文件上传,但是FeignClient调用接口时不支持上传文件; 本项目采用Feign-form扩展库进行实现文件上传,期间也遇到了很多问题,在这里就和大家分享一下遇到的问题和解决办法。 以下是我感觉比较实用的一些博客,我虽然没有全部遇到博主们说的那些问题,但是相信这些会对大家有所帮助。 http://www.soscw.com/info-detail-2311867.html https://blog.csdn.net/ytzzh0726/article/details/79467843 https://blog.csdn.net/hlp4207/article/details/81235487 http://blog.xuahua.com/articles/2018/11/16/1542340328956.html https://zhuanlan.zhihu.com/p/62167643 项目中本来想同时支持多个文件上传,但是反复试了许多次 都是一直报错;后来百度发现只支持单文件上传,要想实现多文件上传,请参考上面的参考链接。异常信息如下: 项目中既要用feign调用普通微服务接口,又要调用文件上传接口,按照网上的配置之后,调用普通的微服务接口就会报错,报错信息和上面的报错信息类似,就不贴异常信息了。经过不断的查阅资料,终于找到了不会影响其他feign接口调用的配置,配置信息如下: ☆:consumers属性设置为multipart/form-data,该属性不可缺少。 ☆:服务类里面调用的时候,需要注意一下MultipartFile的第一个参数一定要和@RequestPart声明的名字保持一致。 FeignClient接口中方法声明如下: 服务类里面调用FeignClient文件上传接口代码如下: 以上就是项目中遇到的问题及解决办法,希望能帮助到大家;若还有其他问题可参考上面的参考链接,里面也写了一些问题及解决办法。 spring cloud —— feign文件上传 标签:autowired exception lis core return back rgs 资料 多文件 原文地址:https://www.cnblogs.com/ntfblogs/p/11107335.html前言
参考
项目中遇到的问题
1.Feign-form库只支持单文件上传
1 feign.codec.EncodeException: class [Lorg.springframework.web.multipart.MultipartFile; is not a type supported by this encoder.
2 at feign.codec.Encoder$Default.encode(Encoder.java:90) ~[feign-core-9.5.0.jar:na]
3 at feign.form.FormEncoder.encode(FormEncoder.java:87) ~[feign-form-3.0.3.jar:3.0.3]
4 at feign.form.spring.SpringFormEncoder.encode(SpringFormEncoder.java:62) ~[feign-form-spring-3.0.3.jar:3.0.3]
5 at feign.ReflectiveFeign$BuildEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:351) ~[feign-core-9.5.0.jar:na]
6 at feign.ReflectiveFeign$BuildTemplateByResolvingArgs.create(ReflectiveFeign.java:213) ~[feign-core-9.5.0.jar:na]
7 at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:72) ~[feign-core-9.5.0.jar:na]
8 at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) ~[feign-core-9.5.0.jar:na]
2.encoder配置类
1 /**
2 * 引用配置类MultipartSupportConfig.并且实例化
3 */
4 @Scope("prototype")
5 @Primary
6 @Configuration
7 class MultipartSupportConfig {
8 @Autowired
9 private ObjectFactory
3.FeignClient接口里方法参数是文件类型的要用@RequestPart注解,且要设置ContentType为multipart/form-data
1 /**
2 * 上传文件
3 * @param files
4 * @return
5 */
6 @PostMapping(value = "/test/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
7 Base
> upload(@RequestPart(value = "file") MultipartFile file);
1 byte[] b = new byte[1014];
2 MultipartFile multipartFile = new MockMultipartFile("file", "demo.pdf", ContentType.APPLICATION_OCTET_STREAM.toString(), new ByteArrayInputStream(b));
3 Base
> upload = fileUpService.upload(multipartFile);