OpenFeign远程调用注解及file转MultipartFile遇到的坑

项目场景:

在微服务项目中,会使用到openFegin来调取其他服务的接口。公司使用的微服务文件上传接口因为部署在线上,而自己本地测试时不方便,遇到上传文件时报错无法快速定位


问题描述:

公司文件上传的服务器是FTP,给出的接口是
@Service
@FeignClient(name = "file-system",configuration = FeignSupportConfig.class, fallback = FileUploadFeignServiceFallback.class)
public interface FileUploadFeignService {
    /**
     *  远程调用服务,上传文件
     * @return
     */
    @PostMapping(value = "/file/upload-and-back-merge/{fileStrategy}", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    Result fileUpload(@RequestPart("file") MultipartFile file,
                      @RequestParam("fileName") String fileName,
                      @RequestParam("md5") String md5,
                      @RequestParam("size") long size,
                      @RequestParam(name = "chunks", required = false) Integer chunks,
                      @RequestParam(name = "chunk", required = false) Integer chunk,
                      @PathVariable(name = "fileStrategy") String fileStrategy) throws Exception;
        }

我在本地测试时直接使用fegin name来调用是不通的


原因分析:

openFeign调用远程服务器也可以在本地进行

1.@FeignClient的name可以调用同一个注册中心的微服务,直接使用该微服务的别名调用
2.@FeignClient的url可以远程调用执行服务器上的微服务,url可以为http:/{url}/path格式,此时name只为名字
3.@FeignClient的path,当url存在时,完整路径为url+path
4.@FeignClient,当name和path存在,url不存在时,完整路径为 name+path,自动拼接http://

可见:这位博主写的不错


解决方案:

根据上述openFegin的使用规则,我在代码中改为:
@Service
@FeignClient(name = "file-system",url = "https://xxx",path = "file-system",configuration = FeignSupportConfig.class, fallback = FileUploadFeignServiceFallback.class)
public interface FileUploadFeignService {
    /**
     *  远程调用服务,上传文件
     * @return
     */
    @PostMapping(value = "/file/upload-and-back-merge/{fileStrategy}", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    Result fileUpload(@RequestPart("file") MultipartFile file,
                      @RequestParam("fileName") String fileName,
                      @RequestParam("md5") String md5,
                      @RequestParam("size") long size,
                      @RequestParam(name = "chunks", required = false) Integer chunks,
                      @RequestParam(name = "chunk", required = false) Integer chunk,
                      @PathVariable(name = "fileStrategy") String fileStrategy) throws Exception;

该接口参数为MultipartFile,文件上传时本地生成的file转为MultipartFile,我在百度上找了一个工具类,但是很显然该工具类有问题,调用接口报400,下面贴一下file转MultipartFile的代码

FileInputStream inputStream = new FileInputStream(file);
            MultipartFile multipartFile = new MockMultipartFile("file", file.getName(),
                    ContentType.MULTIPART_FORM_DATA.toString(), inputStream);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值