Spring Cloud Feign Client 实现MultipartFile上传文件功能

本文介绍了如何在Spring Cloud环境中,使用Feign客户端处理MultipartFile类型的文件上传。在调用远程文件上传接口时,遇到 MissingServletRequestPartException 异常。通过自定义FeignEncoder和避免指定Decoder,最终成功实现远程文件上传,同时确保不影响其他FeignClient调用。
摘要由CSDN通过智能技术生成

这两天老大突然交给一个任务,就是当用户关注我们的微信号时,我们应该将其微信头像下载下来,然后上传到公司内部的服务器上。如果直接保存微信头像的链接,当用户更换微信头像时,我们的产品在获取用户头像很可能会出现404异常。

由于公司运用的技术栈为Spring Cloud(一些Eureka, Feign)进行服务注册和远程调用。

重点来了。。。。但直接使用FeignClient去远程调用注册中心上的上传文件接口,会一直报错。

@PostMapping
    @ApiOperation(value = "上传文件")
    public String fileUpload(@ApiParam(value = "文件", required = true) @RequestParam("file") MultipartFile multipartFile,
            @ApiParam(value = "usage(目录)", required = false) @RequestParam(value = "usage", required = false) String usage,
            @ApiParam(value = "同步(可选,默认false)") @RequestParam(value = "sync", required = false, defaultValue = "false") boolean sync) {
        if (multipartFile == null) {
            throw new IllegalArgumentException("参数异常");
        }
        String url = map.get(key).doUpload(multipartFile, usage, sync);
        return UploadResult.builder().url(url).build();
    }

远程的上传文件的接口。

@FeignClient("dx-commons-fileserver")
public interface FileServerService {


@RequestMapping(value="/file", method = RequestMethod.POST)
    public String fileUpload(
    @RequestParam("file") MultipartFile multipartFile,
    @RequestParam(value = "usage", required = false) String usage,
            @RequestParam(value = "sync", required = false, defaultValue = "false") boolean sync);
}

普通的FeignClient远程调用代码。但是这样的实现,在去调用的时候一直抛异常:MissingServletRequestPartException,"Required request part  'file' is not present"

这里去跟踪:fileServerService.fileUpload(multipartFile, null, true)源码发现发送的url是将multipartFile以url的方式拼接在query string上。所以这样的调用肯定是不行的。


那从百度搜索了一下关键词: feign upload 会看到有这样一种解决方案:

(原文转自:http://www.jianshu.com/p/dfecfbb4a215)

maven

        <dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form-spring</artifactId>
            <version>2.1.0</
  • 11
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 39
    评论
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值