feign多文件上传,feign传参数
目录
假装传参多文件问题首先引入依赖新建假装的配置在假装接口中配置假装传输多文件的一些问题文件转多文件
feign传参MultipartFile问题
首先,假装服务之间的调用,传参默认的格式为:内容类型=应用程序/x-www-form-urlencoded
以表单的形式传参的,而文件流的传参,需要表单数据的内容类型,否则会报错的
首先引入依赖
依赖性groupIdio.github.openfeign.form/groupId artifactId Fei-form/artifactId版本3 .8 .0/版本/依赖性groupIdio.github.openfeign.form/groupId artifactId Fei-form-spring/artifactId版本3 .8 .0/版本/依赖性注意板簧罩版本是2.x以上的,上面两个依赖的版本不低于3.5.0,否则还是无效的
新建feign的配置
包com。WM。博客_配置。配置;导入假装。编解码器。编码器;导入假装。形式。春天。springformencoder导入org。spring框架。豆子。工厂。对象工厂;导入org。spring框架。豆子。工厂。注释。自动连线;导入组织。spring框架。靴子。自动配置。http。http消息转换器;导入org。spring框架。云。打开假装。支持。弹簧编码器;导入org。spring框架。语境。注释。豆;导入org。spring框架。语境。注释。配置;/* * * * @作者:半卷流年* @描述:解决假装传递流数据的异常* @ create time:2020/6/14 */@ configuration公共类FeignSupportConfig { @ Autowired private objectfactoryhtpmessageconverters消息转换器;@Bean公共编码器feignFormEncoder(){ return new spring form Encoder(new spring Encoder(消息转换器));} }
在feign接口中配置
包com。WM。博客_管理员。假装;导入com。WM。博客_管理员。假装。工厂。pictureclientfallbackfactory导入com。WM。博客_常见。常量atnt。普通常数;导入com。WM。博客_常见。域。tfiledo导入com。WM。博客_常见。实体。tfile导入com。WM。博客_常见。请求。tfilequery导入com。WM。博客_常见。结果。结果;导入com。WM。博客_配置。配置。customfeignconfig导入com。WM。博客_配置。配置。feignsupportconfig重要
t org.springframework.cloud.openfeign.FeignClient;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile; import java.util.List; /*** * @ClassName: PictureFeignClient * @Description: picture feign调用 todo feign使用get有坑啊,是否考虑使用HttpClient替换feign的HttpURLConnection,采用apache的HttpClient * @Author: wm_yu * @Create_time: 16:39 2020-3-26 */@FeignClient(value = CommonConstant.PICTURE_MODULE_NAME, configuration = {CustomFeignConfig.class, FeignSupportConfig.class}, fallbackFactory = PictureClientFallbackFactory.class)public interface PictureFeignClient { /** * id查询图片信息 * @param id * @return */ @GetMapping("/web/picture/{id}") Result<TFileDO> get(@PathVariable("id") Long id); /** * id批量查询图片信息 * @param idList * @return */ @PostMapping("/web/picture/getByIdList") Result<List<TFile>> getByIdList(@RequestBody List<Long> idList); /** * 文件上传 * @param file * @return */ @PostMapping(value = "/web/picture/uploadFile",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE) Result<String> uploadFile(@RequestPart("file") MultipartFile file); }
注意加上这个,表示传参格式:
就可以传参了的
Feign传输 MultipartFile的一些问题
File转MultipartFile
pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework/spring-mock --><dependency><groupId>org.springframework</groupId><artifactId>spring-mock</artifactId><version>2.0.8</version></dependency>
public static MultipartFile getMultipartFile(String fileName, File file) throws IOException { return new MockMultipartFile(fileName, file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), new FileInputStream(file));}
报错 Current request is not a multipart request、Content type ‘’ not supported
@PostMapping设置 consumes = MediaType.MULTIPART_FORM_DATA_VALUE
使用@RequestPart(),不能使用@RequestParam()
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)ResultBody upload(@RequestPart(value = "file") MultipartFile file);
报错 Required request part ‘file’ is not present
configuration
@Configurationpublic class UploadFeignConfig { @Bean public Encoder multipartFormEncoder() { return new SpringFormEncoder(new SpringEncoder(new ObjectFactory<HttpMessageConverters>() { @Override public HttpMessageConverters getObject() throws BeansException { return new HttpMessageConverters(new RestTemplate().getMessageConverters()); } })); }}
FeignClient
@FeignClient(value = FileConstants.FILE_SERVER, configuration= UploadFeignConfig.class)public interface FileServiceClient extends IFileServiceClient { @Override @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) ResultBody upload(@RequestPart(value = "file") MultipartFile file);}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。