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

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

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

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

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

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

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

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

RestTemplate的DELETE及PUT等請求方法使用精講

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

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

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

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

一、文件上傳

寫一個(gè)單元測試類,來完成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";
      // 封裝請求參數(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ā)送請求并輸出結(jié)果
      System.out.println("--- 開始上傳文件 ---");
      String result = restTemplate.postForObject(url, param, String.class);
      System.out.println("--- 訪問地址:" + result);
   }
}

輸出結(jié)果如下:

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

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

二、文件下載

執(zhí)行下列代碼之后,被下載文件url,會被正確的保存到本地磁盤目錄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("文件下載請求結(jié)果狀態(tài)碼:" + rsp.getStatusCode());
   // 將下載下來的文件內(nèi)容保存到本地
   String targetPath = "D:\\data\\local\\splash-down.png";
   Files.write(Paths.get(targetPath), Objects.requireNonNull(rsp.getBody(),
               "未獲取到下載文件"));
}

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

三、大文件下載

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

設(shè)置了請求頭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";
   //定義請求頭的接收類型
   RequestCallback requestCallback = request -> request.getHeaders()
               .setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM, MediaType.ALL));
   //對響應(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大文件流式上傳下載的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

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

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

    教你如何用好 Java 中的枚舉

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

    Spring Cloud CLI簡單介紹

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

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

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

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

    ZXing支持各種條形碼,二維碼掃描,由多個(gè)模塊組成,?而且支持PC端,移動端,本文將利用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

最新評論

安塞县| 庆安县| 连平县| 西充县| 河北区| 平度市| 罗田县| 奉新县| 九龙坡区| 安龙县| 泰兴市| 鲁山县| 兴业县| 镇雄县| 克什克腾旗| 涿鹿县| 德州市| 青川县| 宣汉县| 通渭县| 玉门市| 朝阳市| 阿巴嘎旗| 如皋市| 黑山县| 平遥县| 和顺县| 广河县| 铜梁县| 兴化市| 夹江县| 平和县| 永和县| 安西县| 胶州市| 峨边| 永昌县| 竹山县| 故城县| 上林县| 乌兰浩特市|