SpringCloud微服务Fiegn传递MultipartFile文件

334 阅读1分钟

前言:前端传来MultipartFile文件到客户端服务后通过Feign传递到业务层时出现传递失败,折腾了一会发现Feign需要加一个配置类来解决问题。

1、调用层配置类

import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;

@Configuration
public class MultipartSupportConfig {

    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;
    
    @Bean
    public Encoder feignFormEncoder() {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }
}

2、调用者Feign接口

// 配置configuration
@FeignClient(name="***", configuration = {MultipartSupportConfig.class})
public interface Client {
    /**
     * 上传文件
     * @Param multipartFile 文件对象
     * @Param uniqueId 用户ID
     * @Param @RequestPart:文件对象需要使用此注解,不要使用@RequestParam,额外参数可以使用
     * @Return 返回数据
     */
    @PostMapping(value="/uploadFile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Result<T> uploadFile(@RequestPart("file") MultipartFile multipartFile, @RequestParam("uniqueId") String uniqueId);
}

3、接收者

@Operation(summary = "上传文件", method = "POST")
@PostMapping("/uploadFile")
public Result <T> uploadFile(@RequestPart("file") MultipartFile multipartFile, @RequestParam("uniqueId") String uniqueId){
    // 文件上传流程...
    return Result.success("返回数据");
}