Feign跨服务传输文件

一、服务端

	@PostMapping(path = "/uploadFile")
	@ResponseBody
	public ObjectRestResponse<String> uploadFile(@RequestParam MultipartFile file,@RequestParam String uploadFilePath)  {
//这里是上传文件逻辑代码
	}

二、客户端

1.引入依赖

(我使用的OpenFeign是9.5.0版本)

        <!--解决feign传递参数类型为MultipartFile的问题-->
        <dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>io.github.openfeign.form</groupId>
            <artifactId>feign-form-spring</artifactId>
            <version>3.3.0</version>
        </dependency>

这里注意feign-form与OpenFeign的版本对应关系
官方介绍:https://github.com/OpenFeign/feign-form
在这里插入图片描述

  • OpenFeign为9.*时使用feign-form3.5.0以前版本
  • OpenFeign为10.1.0以后版本时使用feign-form3.5.0之后的版本

2.配置类

import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.cloud.netflix.feign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
  * 这里注入的feignFormEncoder可以覆盖掉原本的encoder
  * 辅助feign传输multipartFile
  */
@Configuration
public class FeignMultipartSupportConfig {
    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;
    @Bean
    public SpringFormEncoder feignFormEncoder () {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }
}

3.FeignClient

//file-service是服务提供者 
@FeignClient(name = "file-service", configuration = FeignMultipartSupportConfig.class)
public interface FileService {
    @PostMapping(value = {"/fileServer/uploadFile"}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ObjectRestResponse<String> uploadFile(@RequestPart("file") MultipartFile file,@RequestParam("uploadFilePath") String uploadFilePath);
}
  • 注意配置configuration = FeignMultipartSupportConfig.class
  • 使用@RequestPart而不是@RequestParam
  • @PostMapping设置 consumes = MediaType.MULTIPART_FORM_DATA_VALUE

4.Controller

    @Autowired
    private FileService fileService;
    @PostMapping(value = "/testFile")
    public void testFile(@RequestPart("file") MultipartFile file, @RequestParam("uploadFilePath")String uploadFilePath){
        ObjectRestResponse<String> res=fileService.uploadFile(file,uploadFilePath);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值