麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Java > 正文

spring cloud feign實現(xiàn)遠程調(diào)用服務傳輸文件的方法

2024-07-14 08:42:14
字體:
來源:轉載
供稿:網(wǎng)友

實踐案例包括兩個項目,服務提供者項目名:upload-service,調(diào)用服務項目名:upload-client,主要給出兩個服務之間的調(diào)用過程,文件上傳功能不提供

項目框架: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>

 

// 申明這是一個Feign客戶端,并且指明服務id@FeignClient(value = "com-spring-caclulate") public interface CacluFeignClient { // 這里定義了類似于SpringMVC用法的方法,就可以進行RESTful的調(diào)用了 @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.業(yè)務層

@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("業(yè)務異常,case", e);   throw new ServiceException(ErrorMsgEnum.SYSTEM_ERROR);  } }}

3.服務寫好后,需要把遠程接口暴露出去

@FeignClient(value = "upload-service", configuration = UpDownFtpFacade.MultipartSupportConfig.class)public interface UpDownFtpFacade { /**  * FTP上傳文件  *  * @param file 文件  * @param logId 日志id  * @return  */ @PostMapping(value = "/ftp/uploadFile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE) FtpApiResponse<FtpUploadResDTO> uploadFileFTP(@RequestPart(value = "file") MultipartFile file,             @RequestParam("logId") String logId); /**  * 引用配置類MultipartSupportConfig.并且實例化  */ @Configuration class MultipartSupportConfig {  @Bean  public Encoder feignFormEncoder() {   return new SpringFormEncoder();  } }}

二.文件上傳客戶端upload-client

@Slf4j@Componentpublic class FileManager {  @Autowired  private UpDownFtpFacade upDownFtpFacade;    /**  * 調(diào)用遠程上傳文件接口  *  * @param file 待上傳的文件  * @return 下載路徑  **/ public FtpApiResponse<FtpUploadResDTO> requestFtpFacade(MultipartFile file) {  try {   DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",     MediaType.ALL_VALUE, true, file.getOriginalFilename());   InputStream input = file.getInputStream();   OutputStream os = fileItem.getOutputStream();   IOUtils.copy(input, os);   MultipartFile multi = new CommonsMultipartFile(fileItem);   FtpApiResponse<FtpUploadResDTO> response = upDownFtpFacade.uploadFileFTP(multi, LogUtil.getLogId());   if (null == response || !response.getSuccess() || null == response.getData()) {    throw new ManagerException(ErrorMsgEnum.FIlE_UPLOAD_FAILED);   }   return response;  } catch (Exception e) {   throw new ManagerException(ErrorMsgEnum.FIlE_UPLOAD_FAILED);  }  }}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人一区视频 | 2021免费日韩视频网 | 免费看欧美黑人毛片 | 久久久精品视频在线观看 | 欧美成人小视频 | 日本在线一区二区 | 亚洲精品久久久久久下一站 | sese在线视频 | 欧产日产国产精品乱噜噜 | 国产久草视频在线 | 成人激情在线观看 | 欧美日韩国产成人在线 | 激情久久一区二区 | 成人免费在线播放 | 久久伊人精品热在75 | 国产乱淫a∨片免费观看 | 国产精品成人免费一区久久羞羞 | 日产精品一区二区三区在线观看 | 99热99精品| 久草在线播放视频 | 91美女视频在线观看 | 久久久精品视频免费 | 日韩av片在线播放 | 亚洲午夜网站 | 久在线观看福利视频69 | 秋霞a级毛片在线看 | 欧美一级毛片大片免费播放 | 蜜桃视频网站www | 五月婷婷第四色 | 九九热九九爱 | 中文字幕电影免费播放 | 视频国产一区二区 | 国产精品jk白丝蜜臀av软件 | 久久精品视频亚洲 | 黄色片视频免费观看 | 中文字幕网址 | 精品久久久久久久久久中文字幕 | 毛片免费视频 | 99影视在线视频免费观看 | 欧美城网站地址 | 嫩草91在线 |