讓feign支持文件傳輸

公司用的spring cloud項目,需要用到feign上傳文件到另一個服務。

首先,默認feign是不支持文件傳輸的,需要給feign增加插件.(spring boot版本:2.0.5.RELEASE)

1. 首先給feign加入支持文件傳輸的插件maven支持:

	    <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>
	    <dependency>
	      <groupId>commons-fileupload</groupId>
	      <artifactId>commons-fileupload</artifactId>
	      <version>1.3.3</version>
	    </dependency>

2. 爲feign接口所在java文件指定配置文件類FeignConfig,在其中配置表單的參數Encoder實例(不配置encoder會使用feign默認的encoder,具體哪個類待以後研究,這也是feign不支持文件傳輸的根本原因!)

@Configuration
public class FeignConfig {


    @Bean
    public feign.codec.Encoder  feignFormEncoder() {
      return new SpringFormEncoder();
    }
}

3.爲對外接口聲明類指定剛纔新建的config類.

同時在文件傳輸接口上指定兩個header:@Headers(value={"Content-Type: multipart/form-data","accept: multipart/form-data"}),指明請求是文件流傳輸

4.接口形參上增加@RequestPart註解,標記參數類型爲文件

@FeignClient(value = "user",configuration = FeignConfig.class)
public interface WeiboFeignService {
	
	
	@Headers(value={"Content-Type: multipart/form-data","accept: application/json;charset=UTF-8"})
	@RequestMapping(value = "/api/user/upload_head", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,method = RequestMethod.POST)
	public String uploadPic(@RequestPart("image")MultipartFile image,@RequestParam("weiboUid")String weiboUid);
	

}

好了,去試試看能不能用吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章