Feign之Multipartfile文件传输填坑

这篇文章主要介绍了Feign之multipartfile文件传输埋坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

multipartfile文件传输

1. 添加依赖

io.github.openfeign.formfeign-form3.3.0io.github.openfeign.formfeign-form-spring3.3.0

2. 添加配置类

@Configuration public class FeignMultipartConfig { @Bean @Primary @Scope("prototype") public SpringFormEncoder multipartFormEncoder() { return new SpringFormEncoder(); } @Bean public feign.Logger.Level multipartLoggerLevel() { return feign.Logger.Level.FULL; } }

3. 接口编写

@FeignClient使用配置类

@PostMapping设置

consumes = MediaType.MULTIPART_FORM_DATA_VALUE

使用@RequestPart(),不能使用@Requestparam()

@FeignClient(value = "face-service",configuration = FeignMultipartConfig.class) public interface FaceClient { @PostMapping(value = "/search/student", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) ResponseBase searchStudentFace(@RequestPart("file") multipartfile file); }

feign不能正常传递参数multipartfile文件)的解决

之前工作中有个业务场景:需要把文件multipartfile进行服务之间的调用(使用的是Feign),特此记录下踩到的坑

需要注意的是:使用认的springcloud自带的spring-cloud-starter-openfeign是不支持传递文件的。

我看网上有很多使用feign-form和feign-form-spring支持jar包,然后配置SpringFormEncoder,但我试了,没有成功,最后使用了另外一种方法,在此记录下吧:

方法一:使用外部依赖

io.github.openfeign.formfeign-form3.3.0io.github.openfeign.formfeign-form-spring3.3.0

新建配置类:

package com.jsyd.ict.ictservicemanager.configuration; 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 feign.codec.Encoder; import feign.form.spring.SpringFormEncoder; import org.springframework.context.annotation.Configuration; /** * 处制定了注入的feignFormEncoder可以覆盖掉原本的encoder * 该方式可以让发送multipartfile成为可能 * @author wangyang * @version 1.0 * @date 2021/4/13 19:13 */ @Configuration public class MultipartSupportConfig { @Autowired private ObjectFactory messageConverters; @Bean public Encoder feignFormEncoder() { return new SpringFormEncoder(new SpringEncoder(messageConverters)); } }

配置feign接口:

package com.jsyd.ict.ictservicemanager.feign; import com.jsyd.ict.ictservicemanager.util.resp.RespUtil; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.multipartfile; import java.io.BufferedInputStream; import java.io.File; import java.io.InputStream; /** * 能力的调用 * * @author wangyang * @version 1.0 * @date 2021/3/11 21:01 */ @FeignClient(name = "ict-service-capacity", configuration = MultipartSupportConfig.class) public interface CapacityFeign { @RequestMapping(value = "contentAudit/baiduImgAuditByFile", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) RespUtil baiduImgAuditByFile(@RequestPart(value = "file") multipartfile file); }

注意:文件的传输需要使用@RequestPart()注解

服务端:

@RequestMapping(value = "/baiduImgAuditByFile", method = RequestMethod.POST) public RespUtil baiduImgAuditByFile(@RequestParam("file") multipartfile file) { // 调用service return null; }

结果发现,这样是获取不到结果的,研究了好一会,因为要着急联调,就没有继续跟踪了,有时间在深入研究下。

后来使用了下面的方法,成功传参

方法二:使用HttpServletRequest获取

上述操作都不需要,即:不需要导入依赖,也不需要创建文件,只需要在服务端通过HttpServletRequest去设置

使用HttpServletRequest设置:

代码如下:

@RequestMapping(value = "/baiduImgAuditByFile", method = RequestMethod.POST) public RespUtil baiduImgAuditByFile(multipartfile file, HttpServletRequest request) { if (file == null) { // 解决服务间调用无法接受multipartfile参数的问题 String contentType = request.getContentType(); if (contentType != null && contentType.toLowerCase().startsWith("multipart/")) { MultipartHttpServletRequest multipartRequest = WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class); if (multipartRequest != null) { MultiValueMap multiFileMap = multipartRequest.getMultiFileMap(); for (Map.Entry> entry : multiFileMap.entrySet()) { file = entry.getValue().get(0); }上一篇:HashMap实现保存两个key相同的数据下一篇:总结Java常用的时间相关转化 热门搜索

Feign服务间传递文件 

传输文件 

文件传输 

WCF文件传输 

传输大文件 

相关文章

Feign之multipartfile文件传输填坑

2021-09-10阅读(3305)评论(0)推荐()

这篇文章主要介绍了Feign之multipartfile文件传输埋坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用Feign实现微服务间文件传输

2021-10-12阅读(3996)评论(0)推荐()

这篇文章主要为大家详细介绍了使用Feign实现微服务间文件传输,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Spring Cloud Feign文件传输的示例代码

2021-11-08阅读(4760)评论(0)推荐()

微服务中通常使用 Feign 作为服务消费者,那么如何使用 Feign 接口传输文件呢?这篇文章主要介绍了Spring Cloud Feign文件传输的示例代码...

Feign调用传输文件异常的解决

2021-10-12阅读(3972)评论(0)推荐()

这篇文章主要介绍了Feign调用传输文件异常的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

基于Feign使用okhttp的填坑之旅

2021-10-12阅读(3492)评论(0)推荐()

这篇文章主要介绍了基于Feign使用okhttp的填坑之旅,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

关于springboot 中使用httpclient或RestTemplate做multipartfile文件跨服务传输的问题

2021-10-06阅读(3248)评论(0)推荐()

这篇文章主要介绍了关于springboot 中使用httpclient或RestTemplate做multipartfile文件跨服务传输的问题,本文给大家介绍...

Java multipartfile实现上传文件/上传图片

2021-10-07阅读(4329)评论(0)推荐()

这篇文章主要介绍了Java multipartfile实现上传文件/上传图片,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下

取消

有人回复邮件通知

提交评论

© 2021 编程之家 

工信部备案号:琼ICP备2022000316号

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...