亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2018年09月03日 13:51:10   作者:藍之魚  
這篇文章主要介紹了spring cloud feign實現(xiàn)遠程調用服務傳輸文件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

實踐案例包括兩個項目,服務提供者項目名: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>

// 申明這是一個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.業(yè)務層

@Service
@Slf4j
public 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
@Component
public class FileManager {
  @Autowired
  private UpDownFtpFacade upDownFtpFacade;
  
  /**
  * 調用遠程上傳文件接口
  *
  * @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);
  }
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JavaAPI的使用方法詳解

    JavaAPI的使用方法詳解

    這篇文章主要介紹了JavaAPI的使用方法詳解,還是比較不錯的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • IDEA配置靜態(tài)資源熱加載操作(Springboot修改靜態(tài)資源不重啟)

    IDEA配置靜態(tài)資源熱加載操作(Springboot修改靜態(tài)資源不重啟)

    這篇文章主要介紹了IDEA配置靜態(tài)資源熱加載操作(Springboot修改靜態(tài)資源不重啟),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Spring?Boot中使用@Value加載配置的方法

    Spring?Boot中使用@Value加載配置的方法

    @Value注解相信很多Spring Boot的開發(fā)者都已經(jīng)有接觸了,通過使用該注解,我們可以快速的把配置信息加載到Spring的Bean中,這篇文章主要介紹了為什么不推薦在SpringBoot中使用@Value加載配置,需要的朋友可以參考下
    2024-05-05
  • 在Mybatis中association標簽多層嵌套的問題

    在Mybatis中association標簽多層嵌套的問題

    這篇文章主要介紹了在Mybatis中association標簽多層嵌套的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • springboot-assembly自定義打包全過程

    springboot-assembly自定義打包全過程

    這篇文章主要介紹了springboot-assembly自定義打包全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java算法中的歸并排序算法代碼實現(xiàn)

    Java算法中的歸并排序算法代碼實現(xiàn)

    這篇文章主要介紹了Java算法中的歸并排序算法代碼實現(xiàn),歸并排序使用的是分治思想(Divide and Conquer),分治,顧名思義,就是分而治之,是將一個大問題分解成小的子問題來解決,需要的朋友可以參考下
    2023-12-12
  • java8如何根據(jù)list對象中的屬性過濾篩選

    java8如何根據(jù)list對象中的屬性過濾篩選

    這篇文章主要介紹了java8如何根據(jù)list對象中的屬性過濾篩選,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 深入理解Java注解類型(@Annotation)

    深入理解Java注解類型(@Annotation)

    這篇文章主要介紹了深入理解Java注解類型(@Annotation),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 基于Java HashMap的死循環(huán)的啟示詳解

    基于Java HashMap的死循環(huán)的啟示詳解

    本篇文章是對Java HashMap的死循環(huán)進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • java客戶端登陸服務器用戶名驗證

    java客戶端登陸服務器用戶名驗證

    這篇文章主要為大家詳細介紹了java客戶端登陸服務器用戶名驗證的相關資料,需要的朋友可以參考下
    2016-05-05

最新評論