1. 文件遠程傳輸主要涉及3點: 請求方式, 媒體類型, 序列化與反序列化, 把握住了這3點,基本上就可以搞
2. 使用Feign傳輸,首先搭建起Feign的架子
2.1 引入spring-cloud-starter-eureka-server依賴,用於啟動一個eureka注冊中心
2.2 引入spring-cloud-starter-eureka依賴,用於開啟向eureka注冊中心注冊自己
2.3 在調用遠程服務的客戶端引入spring-cloud-starter-feign, 用於使用feign
3. 既然是遠程調用, 項目中就必須至少有2個服務,一個扮演客戶端,一個扮演服務端,對於文件上傳來說,可以將文件上傳服務定為客戶端,將文件的處理服務定為服務端.客戶端接收到文件后調用服務端處理文件
3.1 創建一個eureka注冊中心
3.2 創建一個客戶端
3.3 創建一個服務端
4. 基礎架構搭建好了以后,可以在2個服務中都搭建基礎的上傳服務接口了,測試上傳文件沒問題后,可以進行Feign的調用搭建
4.1 使用POST請求
4.2 指定接口接收的數據類型為multipart/form-data
4.3 使用MultipartFile類型接收文件
5. Feign的調用搭建
5.1 誰使用Feign就在誰的配置中開啟支持注解@EnableFeignClients
5.2 創建Feign的基樁,在接口類上綁定要調用服務的服務ID,在接口方法上綁定要調用方法的請求路徑,同時指定媒體類型
6. 此時重啟2個服務,調用試試,發現報錯,原因是編碼問題,此時就是序列化和反序列化的問題,需要:
6.1 引入2個包,用於編碼的支持
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.0.3</version>
</dependency>
6.2 給容器增加一個Bean,用於具體的編碼支持
@Bean
public Encoder encoder(){
return new SpringFormEncoder();
}
7. 總結
傳文件主要盯住3樣東西: POST請求方式, multipart/form-data媒體類型,遠程調用的序列方案