1.feign multipart 跨服務傳遞文件配置類(非全局配置)
public class FeignMultipartConfig {
@Bean
public Encoder multipartFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(new ObjectFactory<HttpMessageConverters>() {
@Override
public HttpMessageConverters getObject() throws BeansException {
return new HttpMessageConverters(new RestTemplate().getMessageConverters());
}
}));
}
}
2.文件服務feign client
@FeignClient(name = "msfileupload", decode404 = true,configuration = FeignMultipartConfig.class)
public interface MsFileUploadFeignApi {
@RequestMapping(value = "/upload/single", method = RequestMethod.POST, produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}
,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
UploadResponse singleUpload(@RequestParam("bizType") String bizType, @RequestPart("file") MultipartFile file);
@RequestMapping(value = "/upload/multi", method = RequestMethod.POST,produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}
,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
BaseRestResponse multiUpload(@RequestParam("bizType") String bizType, @RequestPart("files") MultipartFile[] files);
}
3.當前服務暴露給外部的feign client
@FeignClient(name = "demoservice", url = "${demoservice.feign.url:}" , fallback = FileUploadCommonApiFallBack.class)
public interface FileUploadCommonApi {
@RequestMapping(value = "/common/file/upload/single", method = RequestMethod.POST)
UploadResponse singleUpload(@RequestParam("bizType") String bizType, @RequestParam("file") MultipartFile file);
@RequestMapping(value = "/common/file/upload/multi", method = RequestMethod.POST)
BaseRestResponse multiUpload(@RequestParam("bizType") String bizType
, @RequestParam("files") MultipartFile[] files);
}
4.當前服務控制器代碼片段:
@Slf4j
@RestController("fileUploadCommonControllerV1")
@Api(value = "文件通用處理", tags= "文件上傳通用控制器")
public class FileUploadCommonController implements FileUploadCommonApi {
@Autowired
MsFileUploadFeignApi msFileUploadFeignApi;
@ApiOperation(value = "單個文件上傳", notes = "單文件上傳")
@Override
public UploadResponse singleUpload(@RequestParam("bizType") String bizType
, @RequestParam("file") MultipartFile file) {
log.info("FileUploadCommonController.singleUpload ...");
return msFileUploadFeignApi.singleUpload(bizType,file);
}
@ApiOperation(value = "多個文件上傳", notes = "多個文件上傳")
@Override
public BaseRestResponse multiUpload(@RequestParam("bizType") String bizType
, @RequestParam("files") MultipartFile[] files) {
log.info("FileUploadCommonController.multiUpload ...");
return msFileUploadFeignApi.multiUpload(bizType,files);
}
}