公司用的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);
}
好了,去試試看能不能用吧