springCloud微服务上传文件

       参考博文:https://blog.csdn.net/qq_32786873/article/details/79756720

      参考博文:https://blog.csdn.net/shuoshuo132/article/details/81200936

       这里讲的是两个服务之间传文件的过程,从消费者即Feign客户端调用提供者,并上传文件到服务器。如果只是提供者上传文件,写法很简单,基本和springboot的写法一样,但是跨服务了,就出现各种问题。网上也看很多大神的解决方案,最后各种尝试才弄好了,在这里记录一下,以便日后使用。


首先要想上传文件必须先导入两个jar包,如下:


     io.github.openfeign.form
     feign-form
     2.1.0


     io.github.openfeign.form
     feign-form-spring
     2.1.0

然后写一个配置类,如下:

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;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MultipartSupportConfig {
    @Autowired
    private ObjectFactory messageConverters;

    @Bean
    public Encoder feignFormEncoder() {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }
}

然后在service里面调用配置类,并且使用@RequestPart注解,代码如下:

@FeignClient(value = "ResourceProvider", configuration = MultipartSupportConfig.class)
public interface ResourceService {
    //consumes = MediaType.MULTIPART_FORM_DATA_VALUE 设置该请求为文件上传请求
    //@PostMapping(value = "/provider/resource/imgfileup.do", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @PostMapping(value = "/provider/resource/imgfileup.do")
    public R fileUp(@RequestPart("file") MultipartFile file) throws IOException;

}

       我这里把consumes=MediaType.MULTIPART_FORM_DATA_VALUE给去掉了,是因为我在Postman里进行测试,然后设置了请求方式已经为文件上传,如果加上就会报错,所以去掉了,你们可以根据自己的情况进行设置。还有一点要提这里使用了注解@RequestPart注解,但是提供者里面,不要也改成@RequestPart,还是继续使用@RequestParm注解。

17年的以前的springcloud版本好像不支持文件上传,后来可以通过引入包来实现,现在不知道有没有最新写法,还没时间去研究,各位如果有什么新的写法可以告诉我。

 

你可能感兴趣的:(Java)