Feign實(shí)現(xiàn)跨服務(wù)文件上傳下載
本文實(shí)例為大家分享了Feign實(shí)現(xiàn)跨服務(wù)的文件上傳下載操作,供大家參考,具體內(nèi)容如下
1、跨服務(wù)文件上傳,目前feign不支持調(diào)用文件上傳接口,需要自行配置來(lái)滿(mǎn)足feign的調(diào)用方式
①.首先需要在pom文件里添加feign依賴(lài)
<dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.2.2</version> </dependency>
②.上傳的接口
@FeignClient(value = "fdn-storage", configuration = {FileFeignConfig.class}) public interface FileClient { String PREFIX_PATH = "/oss/files"; /** * 上傳存儲(chǔ)文件 * @param file * @return * @throws IOException */ @PostMapping(value = PREFIX_PATH + "/", consumes = MULTIPART_FORM_DATA_VALUE) FeignResult<FileEntity> save(@RequestPart(value = "file") MultipartFile file) throws IOException; }
③.添加配置來(lái)滿(mǎn)足feign的調(diào)用
@Configuration public class FileFeignConfig { @Autowired private ObjectFactory<HttpMessageConverters> messageConverters; @Bean @Primary @Scope("prototype") public Encoder feignEncoder() { return new SpringFormEncoder(new SpringEncoder(messageConverters)); } @Bean public feign.Logger.Level multipartLoggerLevel() { return feign.Logger.Level.FULL; } }
④.外部服務(wù)的controller層調(diào)用
public class TestController extends BaseRestController { @Autowired FileClient client; /** * 上傳文件 **/ @PostMapping(value = "/" , consumes = MULTIPART_FORM_DATA_VALUE) public FileEntity save(@RequestPart(value = "file") MultipartFile file) throws IOException { FileEntity fileEntity = client.save(file).getData(); return fileEntity; } }
到此位置就可以上傳成功了
2、跨服務(wù)的文件下載
①.下載的接口(也是寫(xiě)在public interface FileClient),是用feign.Response來(lái)作為返回值的
/** * 下載文件 * @param id * @return * @throws IOException */ @GetMapping(value = PREFIX_PATH + "/{id}/data") Response download(@PathVariable("id") String id) throws IOException;
②.外部服務(wù)的controller層調(diào)用
/** *由id下載存儲(chǔ)的文件 */ @GetMapping(value = "/{id}/data") public void downloadFile(@PathVariable String id, HttpServletResponse servletResponse) throws IOException { Response response = client.download(id); Response.Body body = response.body(); for(Object key : response.headers().keySet()){ List<String> kList = (List)response.headers().get(key); for(String val : kList){ servletResponse.setHeader(StringUtils.toString(key), val); } } try(InputStream inputStream = body.asInputStream(); OutputStream outputStream = servletResponse.getOutputStream() ){ byte[] b = new byte[inputStream.available()]; inputStream.read(b); outputStream.write(b); outputStream.flush(); }catch (IOException e){ throw new RestException("IO流異常", e); } }
至此,下載文件完成。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringCloud Finchley+Spring Boot 2.0 集成Consul的方法示例(1.2版本)
- spring boot openfeign從此和httpClient說(shuō)再見(jiàn)詳析
- springboot openfeign從JSON文件讀取數(shù)據(jù)問(wèn)題
- 解決Spring Boot和Feign中使用Java 8時(shí)間日期API(LocalDate等)的序列化問(wèn)題
- SpringBoot2.0 整合 Dubbo框架實(shí)現(xiàn)RPC服務(wù)遠(yuǎn)程調(diào)用方法
- 使用Feign實(shí)現(xiàn)微服務(wù)間文件傳輸
- SpringCloud Feign 服務(wù)調(diào)用的實(shí)現(xiàn)
- Spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用
相關(guān)文章
Spring注解驅(qū)動(dòng)開(kāi)發(fā)實(shí)現(xiàn)屬性賦值
這篇文章主要介紹了Spring注解驅(qū)動(dòng)開(kāi)發(fā)實(shí)現(xiàn)屬性賦值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04spring boot配置ssl(多cer格式)超詳細(xì)教程
這篇文章主要介紹了spring boot配置ssl(多cer格式)超詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11Spring Boot拓展XML格式的請(qǐng)求和響應(yīng)操作過(guò)程
在我們開(kāi)發(fā)過(guò)程中,我們經(jīng)常使用的參數(shù)絕大多少事HTML和JSON格式的請(qǐng)求和響應(yīng)處理,但是我們?cè)趯?shí)際開(kāi)發(fā)過(guò)程中,我們可能經(jīng)歷一些,比如對(duì)于XML格式的請(qǐng)求,本文給大家介紹Spring Boot拓展XML格式的請(qǐng)求和響應(yīng),感興趣的朋友一起看看吧2023-10-10基于Apache組件分析對(duì)象池原理的實(shí)現(xiàn)案例分析
本文從對(duì)象池的一個(gè)簡(jiǎn)單案例切入,主要分析common-pool2組件關(guān)于:池、工廠、配置、對(duì)象管理幾個(gè)角色的源碼邏輯,并且參考其在Redis中的實(shí)踐,對(duì)Apache組件分析對(duì)象池原理相關(guān)知識(shí)感興趣的朋友一起看看吧2022-04-04SpringMVC+Mysql實(shí)例詳解(附demo)
本篇文章主要介紹了SpringMVC+Mysql實(shí)例詳解(附demo),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。2016-12-12Java字符串寫(xiě)入文件三種方式的實(shí)現(xiàn)
這篇文章主要介紹了 Java字符串寫(xiě)入文件三種方式的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-06-06