真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在springcloudfeign中實現(xiàn)遠程調(diào)用服務(wù)傳輸文件

本篇文章給大家分享的是有關(guān)怎么在spring cloud feign中實現(xiàn)遠程調(diào)用服務(wù)傳輸文件,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

蒙陰網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)

依賴:

  
   io.github.openfeign.form
   feign-form
   3.0.3
  
  
   io.github.openfeign.form
   feign-form-spring
   3.0.3
  
  
   commons-fileupload
   commons-fileupload
   1.3.3
  

創(chuàng)建FeignClient接口(用于指定遠程調(diào)用的服務(wù))

// 申明這是一個Feign客戶端,并且指明服務(wù)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);

}

一.文件上傳服務(wù)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 uploadFileFTP(@RequestPart(value = "file") MultipartFile file,
               @RequestParam("logId") String logId) {
  FtpApiResponse 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("文件上傳結(jié)束 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è)務(wù)層

@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服務(wù)目錄
   FtpFileRecordDO ftpFileRecordDO = ftpFileManager.fileUploadToFtp(file);
   if (null == ftpFileRecordDO) {
    log.info("文件上傳至ftp服務(wù)目錄異常");
    throw new ServiceException(ErrorMsgEnum.FILE_UPLOAD_TO_FTP_EXCEPTION);
   }
   return ftpFileManager.addFileRecord(ftpFileRecordDO);
  } catch (Exception e) {
   log.error("業(yè)務(wù)異常,case", e);
   throw new ServiceException(ErrorMsgEnum.SYSTEM_ERROR);
  }
 }
}

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

@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 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;
  
  /**
  * 調(diào)用遠程上傳文件接口
  *
  * @param file 待上傳的文件
  * @return 下載路徑
  **/
 public FtpApiResponse 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 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);
  }
  }
}

以上就是怎么在spring cloud feign中實現(xiàn)遠程調(diào)用服務(wù)傳輸文件,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站標題:怎么在springcloudfeign中實現(xiàn)遠程調(diào)用服務(wù)傳輸文件
文章轉(zhuǎn)載:http://weahome.cn/article/podgds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部