首页 > 运营 > 帮助中心 > 正文

spring cloud feign实现远程调用服务传输文件的方法

2020-07-28 14:51:34
字体:
来源:转载
供稿:网友

实践案例包括两个项目,服务提供者项目名:upload-service,调用服务项目名:upload-client,主要给出两个服务之间的调用过程,文件上传功能不提供

项目框架:spring-boot 2.0.1.RELEASE、spring-cloud Finchley.RELEASE

依赖:

  <dependency>   <groupId>io.github.openfeign.form</groupId>   <artifactId>feign-form</artifactId>   <version>3.0.3</version>  </dependency>  <dependency>   <groupId>io.github.openfeign.form</groupId>   <artifactId>feign-form-spring</artifactId>   <version>3.0.3</version>  </dependency>  <dependency>   <groupId>commons-fileupload</groupId>   <artifactId>commons-fileupload</artifactId>   <version>1.3.3</version>  </dependency>

创建FeignClient接口(用于指定远程调用的服务)

// 申明这是一个Feign客户端,并且指明服务id@FeignClient(value = "com-spring-caclulate") public interface CacluFeignClient { // 这里定义了类似于SpringMVC用法的方法,就可以进行RESTful的调用了 @RequestMapping(value = "/caclu/{num}", method = RequestMethod.GET) public Item caclulate(@PathVariable("num") Integer num);} 

一.文件上传服务upload-service

1.控制层

@Slf4j@CrossOrigin@RestController@RequestMapping("/ftp")@Api(description = "文件上传控制")public class FtpFileController { @Autowired private FtpFileService ftpFileService; /**  * FTP文件上传  *  * @return  */ @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public FtpApiResponse<FtpUploadResDTO> uploadFileFTP(@RequestPart(value = "file") MultipartFile file,               @RequestParam("logId") String logId) {  FtpApiResponse<FtpUploadResDTO> result = new FtpApiResponse<>();  LogUtil.updateLogId(logId);  try {   log.info("文件上传开始!}");   Long startTime = System.currentTimeMillis();   FtpUploadResDTO resDTO = ftpFileService.uploadFile(file);   result.setData(resDTO);   result.setSuccess(true);   result.setTimeInMillis(System.currentTimeMillis() - startTime);   log.info("文件上传结束 resDTO:{},耗时:{}", resDTO, (System.currentTimeMillis() - startTime));  } catch (ServiceException e){   result.setSuccess(false);   result.setErrorCode(ErrorMsgEnum.FILE_UPLOAD_EXCEPTION.getCode());   result.setErrorMsg(ErrorMsgEnum.FILE_UPLOAD_EXCEPTION.getMsg());  } catch (Exception e) {   result.setSuccess(false);   result.setErrorCode(ErrorMsgEnum.SYSTEM_ERROR.getCode());   result.setErrorMsg(ErrorMsgEnum.SYSTEM_ERROR.getMsg());   log.info("文件上传失败 Exception:{}", Throwables.getStackTraceAsString(e));  }  return result; }}

2.业务层

@Service@Slf4jpublic class FtpFileService { @Autowired private FtpFileManager ftpFileManager; /**  * 上传文件  *  * @param file  * @return  */ public FtpUploadResDTO uploadFile(MultipartFile file) {  try {   //判断上传文件是否为空   if (null == file || file.isEmpty() || file.getSize() == 0) {    log.info("传入的文件为空,file:{}", file);    throw new ServiceException(ErrorMsgEnum.EMPTY_FILE);   }   //文件上传至ftp服务目录   FtpFileRecordDO ftpFileRecordDO = ftpFileManager.fileUploadToFtp(file);   if (null == ftpFileRecordDO) {    log.info("文件上传至ftp服务目录异常");    throw new ServiceException(ErrorMsgEnum.FILE_UPLOAD_TO_FTP_EXCEPTION);   }   return ftpFileManager.addFileRecord(ftpFileRecordDO);  } catch (Exception e) {   log.error("业务异常,case", e);   throw new ServiceException(ErrorMsgEnum.SYSTEM_ERROR);  } }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表