没有合适的资源?快使用搜索试试~ 我知道了~
首页Spring Cloud中FeignClient实现文件上传功能
Spring Cloud中FeignClient实现文件上传功能
1.8k 浏览量
更新于2023-05-26
评论
收藏 55KB PDF 举报
主要为大家详细介绍了Spring Cloud中FeignClient实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
资源详情
资源评论
资源推荐

Spring Cloud中中FeignClient实现文件上传功能实现文件上传功能
主要为大家详细介绍了Spring Cloud中FeignClient实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可
以参考一下
项目概况:Spring Cloud搭的微服务,使用了eureka,FeignClient,现在遇到FeignClient调用接口时不支持上传文件,
百度到两种方案,一种是使用feign-form和feign-form-spring库来做,源码地址。
具体的使用方法是加入maven依赖
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.2.2</version>
</dependency>
注入SpringFormEncoder类
@Bean
@Primary
@Scope("prototype")
public Encoder multipartFormEncoder() {
return new SpringFormEncoder();
}
FeignClient接口里方法参数是文件类型的要用@RequestPart注解,且要设置ContentType为multipart/form-data
@ResponseBody
@RequestMapping(value = "/ctstestcase/updateTestCase", method = {RequestMethod.POST}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Map<String, Object> updateTestCase(@RequestParam("testcaseId") String testcaseId,
@RequestParam("name") String name, @RequestParam("assignId") String assignId,
@RequestParam("areaId") String areaId, @RequestParam("state") Integer state,
@RequestParam("iterationId") String iterationId,@RequestParam("priority") Integer priority,
@RequestParam("moduleId") String moduleId, @RequestParam("executionType") Integer executionType,
@RequestParam("summary") String summary, @RequestParam("tcsteps") String tcsteps,
@RequestParam("relations") String relations,@RequestParam("attachments") String attachments,
@RequestPart("files") MultipartFile[] files);
但遇到一个问题,就是不支持文件数组类型,我看了源码,发现源码里底层是有对MultipartFile[]类型的支持的,源码中有个类叫
SpringManyMultipartFilesWriter,是专门针对文件数组类型进行操作的,但是配置到项目里的SpringFormEncoder类里却没有对
文件数组类型的判断,以致不能支持文件数组的上传.。
SpringManyMultipartFilesWriter源码:
@FieldDefaults(level = PRIVATE, makeFinal = true)
public class SpringManyMultipartFilesWriter extends AbstractWriter {
SpringSingleMultipartFileWriter fileWriter = new SpringSingleMultipartFileWriter();
@Override
public void write (Output output, String boundary, String key, Object value) throws Exception {
if (value instanceof MultipartFile[]) {
val files = (MultipartFile[]) value;
for (val file : files) {
fileWriter.write(output, boundary, key, file);
}
} else if (value instanceof Iterable) {
val iterable = (Iterable<?>) value;
for (val file : iterable) {
fileWriter.write(output, boundary, key, file);
}
}
}
@Override
public boolean isApplicable (Object value) {
if (value == null) {
return false;
}
if (value instanceof MultipartFile[]) {
return true;
}
if (value instanceof Iterable) {


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0