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

RestTemplate文件上傳下載與大文件流式下載

 更新時(shí)間:2022年03月17日 10:27:47   作者:字母哥哥  
這篇文章主要為大家介紹了RestTemplate文件上傳下載與大文件流式下載的使用方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步

本文是精講RestTemplate第6篇,前篇的blog訪問(wèn)地址如下:

RestTemplate在Spring或非Spring環(huán)境下使用精講

RestTemplate實(shí)現(xiàn)多種底層HTTP客戶端類庫(kù)的切換用法

RestTemplate發(fā)送HTTP GET請(qǐng)求使用方法詳解

RestTemplate發(fā)送HTTP POST請(qǐng)求使用方法詳解

RestTemplate的DELETE及PUT等請(qǐng)求方法使用精講

RestTemplate是HTTP客戶端庫(kù),所以為了使用RestTemplate進(jìn)行文件上傳和下載,需要我們先編寫服務(wù)端的支持文件上傳和下載的程序。請(qǐng)參考我之前寫的一篇文章:SpringBoot實(shí)現(xiàn)本地存儲(chǔ)文件上傳及提供HTTP訪問(wèn)服務(wù) 。按照此文完成學(xué)習(xí)之后,可以獲得

一個(gè)以訪問(wèn)服務(wù)URI為"/upload”的文件上傳服務(wù)端點(diǎn)

服務(wù)端點(diǎn)上傳文件成功后會(huì)返回一個(gè)HTTP連接,可以用來(lái)下載文件。

下面我們就開始學(xué)習(xí)使用RestTemplate是HTTP客戶端庫(kù),進(jìn)行文件的上傳與下載。

一、文件上傳

寫一個(gè)單元測(cè)試類,來(lái)完成RestTemplate文件上傳功能,具體實(shí)現(xiàn)細(xì)節(jié)參考代碼注釋

@SpringBootTest
class UpDownLoadTests {
   @Resource
   private RestTemplate restTemplate;
   @Test
   void testUpload()  {
      // 文件上傳服務(wù)上傳接口
      String url = "http://localhost:8888/upload";
      // 待上傳的文件(存在客戶端本地磁盤)
      String filePath = "D:\\data\\local\\splash.png";
      // 封裝請(qǐng)求參數(shù)
      FileSystemResource resource = new FileSystemResource(new File(filePath));
      MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
      param.add("uploadFile", resource);  //服務(wù)端MultipartFile uploadFile
      //param.add("param1", "test");   //服務(wù)端如果接受額外參數(shù),可以傳遞
      // 發(fā)送請(qǐng)求并輸出結(jié)果
      System.out.println("--- 開始上傳文件 ---");
      String result = restTemplate.postForObject(url, param, String.class);
      System.out.println("--- 訪問(wèn)地址:" + result);
   }
}

輸出結(jié)果如下:

--- 開始上傳文件 ---
--- 訪問(wèn)地址:http://localhost:8888/2020/08/12/028b38f1-3f9b-4088-9bea-1af8c18cd619.png

文件上傳之后,可以通過(guò)上面的訪問(wèn)地址,在瀏覽器訪問(wèn)?;蛘咄ㄟ^(guò)RestTemplate客戶端進(jìn)行下載。

二、文件下載

執(zhí)行下列代碼之后,被下載文件url,會(huì)被正確的保存到本地磁盤目錄targetPath。

@Test
void testDownLoad() throws IOException {
   // 待下載的文件地址
   String url = "http://localhost:8888/2020/08/12/028b38f1-3f9b-4088-9bea-1af8c18cd619.png";
   ResponseEntity<byte[]> rsp = restTemplate.getForEntity(url, byte[].class);
   System.out.println("文件下載請(qǐng)求結(jié)果狀態(tài)碼:" + rsp.getStatusCode());
   // 將下載下來(lái)的文件內(nèi)容保存到本地
   String targetPath = "D:\\data\\local\\splash-down.png";
   Files.write(Paths.get(targetPath), Objects.requireNonNull(rsp.getBody(),
               "未獲取到下載文件"));
}

這種下載方法實(shí)際上是將下載文件一次性加載到客戶端本地內(nèi)存,然后從內(nèi)存將文件寫入磁盤。這種方式對(duì)于小文件的下載還比較適合,如果文件比較大或者文件下載并發(fā)量比較大,容易造成內(nèi)存的大量占用,從而降低應(yīng)用的運(yùn)行效率。

三、大文件下載

這種下載方式的區(qū)別在于

設(shè)置了請(qǐng)求頭APPLICATION_OCTET_STREAM,表示以流的形式進(jìn)行數(shù)據(jù)加載

RequestCallback 結(jié)合File.copy保證了接收到一部分文件內(nèi)容,就向磁盤寫入一部分內(nèi)容。而不是全部加載到內(nèi)存,最后再寫入磁盤文件。

@Test
void testDownLoadBigFile() throws IOException {
   // 待下載的文件地址
   String url = "http://localhost:8888/2020/08/12/028b38f1-3f9b-4088-9bea-1af8c18cd619.png";
   // 文件保存的本地路徑
   String targetPath = "D:\\data\\local\\splash-down-big.png";
   //定義請(qǐng)求頭的接收類型
   RequestCallback requestCallback = request -> request.getHeaders()
               .setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM, MediaType.ALL));
   //對(duì)響應(yīng)進(jìn)行流式處理而不是將其全部加載到內(nèi)存中
   restTemplate.execute(url, HttpMethod.GET, requestCallback, clientHttpResponse -> {
      Files.copy(clientHttpResponse.getBody(), Paths.get(targetPath));
      return null;
   });
}

以上就是RestTemplate文件上傳下載與大文件流式下載的詳細(xì)內(nèi)容,更多關(guān)于RestTemplate大文件流式上傳下載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Kotlin內(nèi)存陷阱inline使用技巧示例詳解

    Kotlin內(nèi)存陷阱inline使用技巧示例詳解

    這篇文章主要為大家介紹了Kotlin內(nèi)存陷阱inline使用技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java簡(jiǎn)易計(jì)算器程序設(shè)計(jì)

    Java簡(jiǎn)易計(jì)算器程序設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)易計(jì)算器程序設(shè)計(jì)的相關(guān)參考資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • java 全角半角字符轉(zhuǎn)換的方法實(shí)例

    java 全角半角字符轉(zhuǎn)換的方法實(shí)例

    這篇文章主要介紹了java 全角半角字符轉(zhuǎn)換的方法,大家參考使用吧
    2013-11-11
  • 深入講解Java Maven配置

    深入講解Java Maven配置

    這篇文章主要介紹了Maven的安裝配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • IDEA常用插件之類Jar包搜索Maven Search解讀

    IDEA常用插件之類Jar包搜索Maven Search解讀

    文章介紹了IDEA常用插件MavenSearch的使用方法,該插件可以幫助用戶快速查找和瀏覽Maven中央存儲(chǔ)庫(kù)中可用的依賴項(xiàng)和插件,方便用戶管理項(xiàng)目依賴項(xiàng)
    2025-01-01
  • 教你如何用好 Java 中的枚舉

    教你如何用好 Java 中的枚舉

    在本文中,我們將看到什么是 Java 枚舉,它們解決了哪些問(wèn)題以及如何在實(shí)踐中使用 Java 枚舉實(shí)現(xiàn)一些設(shè)計(jì)模式。下面小編將為大家詳細(xì)介紹
    2021-09-09
  • Spring Cloud CLI簡(jiǎn)單介紹

    Spring Cloud CLI簡(jiǎn)單介紹

    本文我們將介紹Spring Boot Cloud CLI(或簡(jiǎn)稱Cloud CLI)。該工具為Spring Boot CLI提供了一組命令行增強(qiáng)功能,有助于進(jìn)一步抽象和簡(jiǎn)化Spring Cloud部署。感興趣的小伙伴們可以參考一下
    2018-12-12
  • Maven依賴中scope的runtime和provied的區(qū)別及說(shuō)明

    Maven依賴中scope的runtime和provied的區(qū)別及說(shuō)明

    這篇文章主要介紹了Maven依賴中scope的runtime和provied的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Springboot使用zxing實(shí)現(xiàn)二維碼生成和解析

    Springboot使用zxing實(shí)現(xiàn)二維碼生成和解析

    ZXing支持各種條形碼,二維碼掃描,由多個(gè)模塊組成,?而且支持PC端,移動(dòng)端,本文將利用zxing實(shí)現(xiàn)二維碼生成和解析,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Java中將Html轉(zhuǎn)換為PDF的方法和步驟

    Java中將Html轉(zhuǎn)換為PDF的方法和步驟

    這篇文章主要介紹了Java中如何將Html轉(zhuǎn)換為PDF的方法,文中有相關(guān)的代碼示例和步驟講解,感興趣的同學(xué)可以參考閱讀
    2023-06-06

最新評(píng)論

肇州县| 吴川市| 涟水县| 阳信县| 化德县| 高唐县| 寿宁县| 长宁区| 随州市| 婺源县| 宜都市| 吴桥县| 蛟河市| 渭南市| 祁阳县| 内丘县| 策勒县| 洞头县| 衡山县| 清水河县| 辽源市| 武穴市| 苍山县| 姚安县| 深泽县| 寻乌县| 龙岩市| 聊城市| 七台河市| 理塘县| 宜良县| 五寨县| 醴陵市| 津南区| 手机| 商水县| 东丽区| 志丹县| 博兴县| 泗阳县| 洛浦县|