国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

spring cloud feign實現遠程調用服務傳輸文件

lmxdawn / 2314人閱讀

摘要:實踐案例包括兩個項目,服務提供者項目名,調用服務項目名,主要給出兩個服務之間的調用過程,文件上傳功能不提供項目框架依賴一文件上傳服務控制層文件上傳控制文件上傳文件上傳開始文件上傳結束,耗時文件上傳失敗業務層上傳文件判

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

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

依賴:

        
            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
        

一.文件上傳服務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("文件上傳結束 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
@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("業務異常,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 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 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);
        }
     }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76950.html

相關文章

  • SpringCloud(第 012 篇)微服務接入 Feign 負載均衡通過 FeignClient

    摘要:添加電影微服務啟動類電影微服務接入進行客戶端負載均衡,通過調用遠程微服務。注解表示該電影微服務已經接入模塊。 SpringCloud(第 012 篇)電影微服務接入 Feign 進行客戶端負載均衡,通過 FeignClient 調用遠程 Http 微服務 - 一、大致介紹 1、本章節主要介紹在 SpringCloud 生態圈中,使用一個類似于 Java HTTP 客戶端的工具 Feig...

    Cobub 評論0 收藏0
  • 8、服務發現&服務消費者Feign

    摘要:公眾號樂園的中提供了兩個組件實現軟負載均衡調用,分別是和。是基于和的客戶端負載工具,它是基于實現的,它可以在客戶端配置服務端列表,然后輪詢請求以實現均衡負載。 公眾號:java樂園 spring cloud的Netflix中提供了兩個組件實現軟負載均衡調用,分別是Ribbon和Feign。上一篇和大家一起學習了Ribbon。Ribbon :Spring Cloud Ribbon是基于H...

    lpjustdoit 評論0 收藏0
  • Spring Cloud Alibaba到底坑不坑?

    摘要:我沒有能力去控制那些自媒體發布這些不實的內容,但是在我了解的范圍內,還是盡力輸出一些我的理解。 之前我發過一篇《說說我為什么看好Spring Cloud Alibaba》,然后這兩天有網友給我轉了這篇文章《坑爹項目spring-cloud-alibaba,我們也來一個》,問我的看法是怎么樣的,聊天時候簡單說了一下。今天在家休息,抽空整理一下內容,逐點說一下我的看法,主要還是覺得這篇文章...

    娣辯孩 評論0 收藏0
  • 解決spring cloud Feign遠程調用服務,添加headers解決攔截器攔截問題

    摘要:使用做服務器時,經常會通過調用遠程服務。有時候我們的遠程服務可能做了某些權限驗證。如果某沒有,可能會被阻止調用。如果每個方法都手動設置,那未免太麻煩。可以通過一個切面,自動幫我們添加請求。 使用spring cloud 做saas服務器時,經常會通過Feign調用遠程服務。有時候我們的遠程服務可能做了某些權限驗證。需要驗證header或者token什么的。如果某沒有token,可能會被...

    walterrwu 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<