心力交瘁。
Feign 作为 Spring Cloud 中 RPC 工具,利用注解来描述接口,简化了 Java HTTP Client 的调用过程,隐藏了实现细节。
如何上传一个/组文件
如何上传多种文件
MultipartFile 参数不能为空问题
未提供 MultipartFile 参数接口报 no multipart boundary was found 问题
<!--feign多文件上传-->
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.8.0</version>
</dependency>
服务–提供者
@RequestMapping(value = "accounts/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ApiResponse avatarUpload(@RequestPart("avatarFile") MultipartFile avatarFile){
System.out.println(avatarFile.getOriginalFilename());
List<String> imgPath = fileService.getImgPath(Arrays.asList(avatarFile));
return ApiResponse.ofSuccess(imgPath.get(0));
}
服务–消费者
1.创建Configuration
@Configuration
public class MultipartSupportConfig {
@Bean
public Encoder feignFormEncoder() {
return new SpringFormEncoder();
}
}
2.修改接口
@RequestMapping(value = "user/accounts/upload",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
ApiResponse avatarUpload(@RequestPart(value = "avatarFile",required = false) MultipartFile avatarFile);
注意:
FeignClient中注解@PostMapping的produeces和consumes
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.MULTIPART_FORM_DATA_VALUE
不能少,否则会一直出
the request was rejected because no multipart boundary was found,
原因是Feign只有存在MultipartFile类型参数时才会设置 boundary
@RequestMapping(value = "accounts/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
public ApiResponse upload(@RequestPart(value = "avatarFile") MultipartFile avatarFile){
System.out.println(avatarFile);
ApiResponse apiResponse = accountService.avatarUpload(avatarFile);
return apiResponse;
}