feign上傳檔案
阿新 • • 發佈:2021-01-29
技術標籤:Eureka
feign上傳檔案
注意:
- 請求方式必須是POST
- consumes必須指定為Media=MediaType.MULTIPART_FORM_DATA_VALUE
- produces 須指定為 MediaType.APPLICATION_JSON_UTF8_VALUE
- 上傳引數的名字最好保持一致
引入依賴
<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>
在UserController中接收引數
@PostMapping(value = "/user/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadPic(MultipartFile file){
//委託FeignClient進行遠端呼叫
return userService.uploadPic(file);
}
FeignClient
由userController呼叫Feign客戶端
編輯配置類MultipartConfig
public class MultipartConfig {
@Bean
@Scope("prototype")
public Encoder encoder(){
return new SpringFormEncoder();
}
}
@FeignClient(name = "user-provider",configuration = MultipartConfig.class) public interface UserService { @PostMapping(value = "/user/upload", produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) String uploadPic(@RequestPart("file") MultipartFile file); }
user-provider
由Feign遠端呼叫user-provider的controller,程式碼如下
@PostMapping(value = "/user/upload",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadPic(MultipartFile file,HttpServletRequest request){
return userService.uploadPic(file,request);
}
具體實現檔案在本地儲存
@PostMapping(value = "/user/upload",produces = MediaType.APPLICATION_JSON_UTF8_VALUE,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadPic(MultipartFile file){
//獲取專案在此電腦上的真實路徑
String fileTrue = System.getProperty("user.dir");
String videoName = file.getOriginalFilename();//獲取檔名稱
fileTrue += "\\file\\";
try {
byte[] bytes = file.getBytes();
Path path = Paths.get(fileTrue + file.getOriginalFilename());
//如果沒有files資料夾,則建立
if (!Files.isWritable(path)) {
Files.createDirectories(Paths.get(fileTrue));
}
//短視訊檔案寫入指定路徑
Files.write(path, bytes);
String pathVideo = String.valueOf(path);
//編寫檔案操作邏輯,現在只是將檔名返回
//return file.getOriginalFilename();
return pathVideo;//上傳檔案儲存路徑
} catch (IOException e) {
e.printStackTrace();
}
return "上傳失敗";
}