最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Feign實現(xiàn)跨服務文件上傳下載

 更新時間:2019年04月26日 10:03:35   作者:浪里xiao白龍  
這篇文章主要為大家詳細介紹了Feign實現(xiàn)跨服務文件上傳下載,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Feign實現(xiàn)跨服務的文件上傳下載操作,供大家參考,具體內(nèi)容如下

1、跨服務文件上傳,目前feign不支持調(diào)用文件上傳接口,需要自行配置來滿足feign的調(diào)用方式

①.首先需要在pom文件里添加feign依賴

<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";
 /**
  * 上傳存儲文件
  * @param file
  * @return
  * @throws IOException
  */
 @PostMapping(value = PREFIX_PATH + "/", consumes = MULTIPART_FORM_DATA_VALUE)
 FeignResult<FileEntity> save(@RequestPart(value = "file") MultipartFile file) throws IOException;
 }

③.添加配置來滿足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;
 }
}

④.外部服務的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、跨服務的文件下載

①.下載的接口(也是寫在public interface FileClient),是用feign.Response來作為返回值的

/**
  * 下載文件
  * @param id
  * @return
  * @throws IOException
  */
 @GetMapping(value = PREFIX_PATH + "/{id}/data")
 Response download(@PathVariable("id") String id) throws IOException;

②.外部服務的controller層調(diào)用

 /**
  *由id下載存儲的文件
  */
 @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);
  }
 }

至此,下載文件完成。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Spring?MVC內(nèi)置過濾器功能示例詳解

    Spring?MVC內(nèi)置過濾器功能示例詳解

    這篇文章主要為大家介紹了Spring?MVC內(nèi)置過濾器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • springboot整合Quartz實現(xiàn)動態(tài)配置定時任務的方法

    springboot整合Quartz實現(xiàn)動態(tài)配置定時任務的方法

    本篇文章主要介紹了springboot整合Quartz實現(xiàn)動態(tài)配置定時任務的方法,非常具有實用價值,需要的朋友可以參考下
    2017-10-10
  • Java中的共享鎖CountDownLatch及源碼解析

    Java中的共享鎖CountDownLatch及源碼解析

    這篇文章主要介紹了Java中的共享鎖CountDownLatch及源碼解析,CountDownLatch是一種同步輔助工具,允許一個或多個線程等待,直到在其它線程中執(zhí)行的一組操作完成;CountDownLatch使用指定的計數(shù)初始化,需要的朋友可以參考下
    2023-11-11
  • java中的FileInputStream(輸入流)

    java中的FileInputStream(輸入流)

    這篇文章主要介紹了java中的FileInputStream(輸入流),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • idea maven編譯報錯Java heap space的解決方法

    idea maven編譯報錯Java heap space的解決方法

    這篇文章主要為大家詳細介紹了idea maven編譯報錯Java heap space的相關解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • java實現(xiàn)最短路徑算法之Dijkstra算法

    java實現(xiàn)最短路徑算法之Dijkstra算法

    這篇文章主要介紹了java實現(xiàn)最短路徑算法之Dijkstra算法, Dijkstra算法是最短路徑算法中為人熟知的一種,是單起點全路徑算法,有興趣的可以了解一下
    2017-10-10
  • Java對象集合按照指定元素順序排序的實現(xiàn)

    Java對象集合按照指定元素順序排序的實現(xiàn)

    最近在對一個集合列表的數(shù)據(jù)進行排序,需求是要集合數(shù)據(jù)按照一個排序狀態(tài)值進行排序,而這個狀態(tài)值,不是按照從小到大這樣的順序排序的,而是要按照特定的順序,所以本文給大家介紹了Java對象集合按照指定元素順序排序的實現(xiàn),需要的朋友可以參考下
    2024-07-07
  • SpringBoot集成redis與session實現(xiàn)分布式單點登錄

    SpringBoot集成redis與session實現(xiàn)分布式單點登錄

    這篇文章主要介紹了SpringBoot集成redis與session實現(xiàn)分布式單點登錄,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Fastjson反序列化隨機性失敗示例詳解

    Fastjson反序列化隨機性失敗示例詳解

    這篇文章主要為大家介紹了Fastjson反序列化隨機性失敗示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Spring實現(xiàn)跨域的幾種方式小結(jié)

    Spring實現(xiàn)跨域的幾種方式小結(jié)

    這篇文章主要給大家總結(jié)了幾種Spring實現(xiàn)跨域的方式,文中通過代碼示例介紹的非常詳細,對我們的學習活工作有一定的幫助,需要的朋友可以參考下
    2023-07-07

最新評論

醴陵市| 滦南县| 天峻县| 洛宁县| 炎陵县| 昌图县| 米泉市| 南澳县| 承德县| 海口市| 永顺县| 天水市| 永胜县| 黑龙江省| 连云港市| 若尔盖县| 鄱阳县| 清徐县| 永城市| 元谋县| 临安市| 大兴区| 泌阳县| 饶平县| 阿合奇县| 九江市| 仁化县| 剑河县| 泽库县| 上饶县| 温州市| 双流县| 天长市| 阿图什市| 西乌珠穆沁旗| 利津县| 惠安县| 屏边| 麻江县| 英山县| 文水县|