成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

lmxdawn / 2318人閱讀

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

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

項目框架: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.業(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 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);
        }
     }
}

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

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

相關文章

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

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

    Cobub 評論0 收藏0
  • 8、服務發(fā)現(xiàn)&服務消費者Feign

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

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

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

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

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

    walterrwu 評論0 收藏0

發(fā)表評論

0條評論

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