1.服务提供方操作,controller这样写:
注意这个:@RequestPart注解,而不是@RequestParam
@RequestMapping(value = "/file/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public String upload(@RequestPart("file") MultipartFile file) {
}
2.服务调用方操作:
加入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.8.0</version> </dependency> <!--配合spring使用--> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.8.0</version> </dependency>
加入配置:
/** * 让feign支持文件调用 */ @Configuration public class MultipartSupportConfig { @Autowired private ObjectFactory<HttpMessageConverters> messageConverters; @Bean @Primary @Scope("prototype") public Encoder feignEncoder() { return new SpringFormEncoder(new SpringEncoder(messageConverters)); } }
Feign客户端写法:
@FeignClient(value = "jb-file",path = "/file",configuration = MultipartSupportConfig.class) public interface FileFeignService { @RequestMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) String upload(@RequestPart("file") MultipartFile file); }
調用方controller写法:
支持多文件上传
@RequestMapping(value = "/add", method = RequestMethod.POST) public R infoByUserId(@RequestParam("name") String name, @RequestParam("phone") String phone, @RequestParam("address") String address, @RequestPart("files") MultipartFile[] files) {
for (MultipartFile file : files) { String id = fileFeignService.upload(file); sb.append(id + "|"); }
}