Spring Cloud Feign的文件上傳實現(xiàn)的示例代碼
在Spring Cloud封裝的Feign中并不直接支持傳文件,但可以通過引入Feign的擴展包來實現(xiàn),本來就來具體說說如何實現(xiàn)。
服務(wù)提供方(接收文件)
服務(wù)提供方的實現(xiàn)比較簡單,就按Spring MVC的正常實現(xiàn)方式即可,比如:
@RestController public class UploadController { @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public String handleFileUpload(@RequestPart(value = "file") MultipartFile file) { return file.getName(); } }
服務(wù)消費方(發(fā)送文件)
在服務(wù)消費方由于會使用Feign客戶端,所以在這里需要在引入feign對表單提交的依賴,具體如下:
<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> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> </dependency>
定義FeignClient,假設(shè)服務(wù)提供方的服務(wù)名為 upload-server
@FeignClient(value = "upload-server", configuration = TestServiceClient.MultipartSupportConfig.class) public interface UploadService { @PostMapping(value = "/uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) String handleFileUpload(@RequestPart(value = "file") MultipartFile file); @Configuration class MultipartSupportConfig { @Bean public Encoder feignFormEncoder() { return new SpringFormEncoder(); } } }
在啟動了服務(wù)提供方之后,嘗試在服務(wù)消費方編寫測試用例來通過上面定義的Feign客戶端來傳文件,比如:
@Test @SneakyThrows public void testHandleFileUpload() { File file = new File("files/aaa.txt"); DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file", MediaType.TEXT_PLAIN_VALUE, true, file.getName()); try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) { IOUtils.copy(input, os); } catch (Exception e) { throw new IllegalArgumentException("Invalid file: " + e, e); } MultipartFile multi = new CommonsMultipartFile(fileItem); log.info(testServiceClient.handleFileUpload(multi)); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中String、StringBuffer、StringBuilder的區(qū)別詳解
java中String、StringBuffer、StringBuilder是編程中經(jīng)常使用的字符串類,他們之間有什么區(qū)別呢?下面小編給大家總結(jié)了Java中String、StringBuffer、StringBuilder的區(qū)別詳解,需要的朋友參考下吧2016-06-06Java項目實戰(zhàn)之在線考試系統(tǒng)的實現(xiàn)(系統(tǒng)介紹)
這篇文章主要介紹了Java項目實戰(zhàn)之在線考試系統(tǒng)的實現(xiàn)(系統(tǒng)介紹),本文通過實例代碼,截圖的形式給大家展示系統(tǒng)技術(shù)架構(gòu),需要的朋友可以參考下2020-02-02Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之KMP算法
在很多地方也都經(jīng)常看到講解KMP算法的文章,看久了好像也知道是怎么一回事,但總感覺有些地方自己還是沒有完全懂明白。這兩天花了點時間總結(jié)一下,有點小體會,我希望可以通過我自己的語言來把這個算法的一些細節(jié)梳理清楚,也算是考驗一下自己有真正理解這個算法2022-02-02springboot?vue接口測試定義編輯功能的實現(xiàn)
這篇文章主要為大家介紹了springboot?vue接口測試定義編輯功能的實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05Spring整合mybatis、springMVC總結(jié)
這篇文章主要為大家詳細介紹了Java整合Mybatis,SpringMVC,文中有詳細的代碼示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2023-05-05