欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot使用RestTemplate如何通過http請求將文件下載到本地

 更新時間:2025年02月10日 08:49:12   作者:lijiabin417  
文章介紹了如何通過編寫代碼批量下載文件,解決了沒有提供批量下載接口的問題,首先篩選出需要下載的文件ID,然后通過后端代碼發(fā)起HTTP請求,將下載的資源寫入本地文件中,總結(jié)了實現(xiàn)方式和注意事項,希望能為類似任務(wù)提供參考

背景

最近被安排了一個活,純體力的重復性工作,將開發(fā)一個項目的指定資源通過現(xiàn)有的下載接口下載下來。

思路

因為沒有提供批量下載接口,同時下載的資源需要自己篩選,想著這樣人工處理特別麻煩,個人也沒有什么進步,就想著寫一段代碼處理,這樣處理起來準確,效率高,后續(xù)有類似的任務(wù)還可以將這段代碼改改后繼續(xù)使用。

1.篩選

篩選出需要的下載文件的id,這個可以根據(jù)業(yè)務(wù)調(diào)整,不一定是id,具體的實現(xiàn)根據(jù)業(yè)務(wù)邏輯實現(xiàn);

2.下載

下載方式有兩種,一種是通過postman或者apifox這種工具,通過提前構(gòu)建參數(shù)和提供寫有參數(shù)的文件,批量出發(fā)請求,這種只是大致想到的可以不靠編碼實現(xiàn)的方式;另外一種是借助后端代碼發(fā)起http請求,將下載的資源寫入本地文件中。下面簡單介紹第二種,需要時可以批量下載文件。

實現(xiàn)方式

  • 資源下載方法
public static void downloadFile(String url, HttpHeaders headers, RequestParams requestParams, String outputPath) throws IOException {


        // 創(chuàng)建請求實體
        HttpEntity<RequestParams> entity = new HttpEntity<>(requestParams, headers);
        // 初始化RestTemplate,也可以自己構(gòu)建配置類。
        final RestTemplate restTemplate = new RestTemplate();
        // 請求配置
        ResponseEntity<Resource> response = restTemplate.exchange(
                URI.create(url),
                HttpMethod.POST,
                entity,
                Resource.class
        );

        // 請求成功校驗
        if (response.getStatusCode().is2xxSuccessful() && response.getBody() != null) {
            // 獲取資源
            Resource resource = response.getBody();

            // 確保目錄存在
            File outputFile = new File(outputPath);
            File parentDir = outputFile.getParentFile();
            // 文件存在校驗
            if (parentDir != null && !parentDir.exists()) {
                if (!parentDir.mkdirs()) {
                    throw new IOException("Failed to create directory: " + parentDir);
                }
            }
            //獲取流
            try (InputStream inputStream = resource.getInputStream();
                 OutputStream outputStream = Files.newOutputStream(outputFile.toPath())) {
                StreamUtils.copy(inputStream, outputStream);
            }
        } else {
            throw new IOException("Failed to download file: " + response.getStatusCode());
        }
    }
  • 實體類(可以自己定義)
@Data
public class RequestParams implements Serializable {
    private Long id;
}
  • 函數(shù)調(diào)用
    public static void downloadPerPaper(PaperInfo paperInfos) throws IOException {
		//url
        String url="https://xxxx.com";
        //請求頭
        HttpHeaders headers = new HttpHeaders();
        headers.set("xxx","xxxxx");
        //請求參數(shù)
        final RequestParams requestParams = new RequestParams();
        requestParams.setId(1L);
        //存在存放地址
        String path="xx/xx/xx.doc";
        //調(diào)用下載方法
        downloadFile(url,headers,requestParams,path);
    }

異常處理

Exception in thread "main" java.nio.file.AccessDeniedException: xx/xx/xx

出現(xiàn)這種報錯是必須指定的具體的文件,而不是文件夾,同時盡量保證存放文件的文件夾必須存在

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java通俗易懂講解泛型

    Java通俗易懂講解泛型

    在正式進入內(nèi)容之前說明一下:泛型的內(nèi)容太多,也太復雜。這里因為Java中寫數(shù)據(jù)結(jié)構(gòu)的時候會使用到,所以加上。關(guān)于泛型我找了挺多文章,再結(jié)合自己的理解,盡可能將其講清楚。不求會使用泛型,只要求后面數(shù)據(jù)結(jié)構(gòu)出現(xiàn)泛型的時候能夠知道是在干什么即可
    2022-05-05
  • Springboot2.0配置JPA多數(shù)據(jù)源連接兩個mysql數(shù)據(jù)庫方式

    Springboot2.0配置JPA多數(shù)據(jù)源連接兩個mysql數(shù)據(jù)庫方式

    這篇文章主要介紹了Springboot2.0配置JPA多數(shù)據(jù)源連接兩個mysql數(shù)據(jù)庫方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解Java線程池和Executor原理的分析

    詳解Java線程池和Executor原理的分析

    這篇文章主要介紹了詳解Java線程池和Executor原理的分析的相關(guān)資料,這里提供實例及分析原理幫助大家理解這部分知識,需要的朋友可以參考下
    2017-07-07
  • Java日常練習題,每天進步一點點(49)

    Java日常練習題,每天進步一點點(49)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • Java自定義標簽用法實例分析

    Java自定義標簽用法實例分析

    這篇文章主要介紹了Java自定義標簽用法,結(jié)合實例形式分析了java自定義標簽的定義、使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2017-11-11
  • 詳解Java中Array和ArrayList的比較和轉(zhuǎn)換

    詳解Java中Array和ArrayList的比較和轉(zhuǎn)換

    在 Java 編程中,arrays 和 arraylists 都是基本的數(shù)據(jù)結(jié)構(gòu),用來存放數(shù)據(jù)集合,雖然兩者的用途一樣,但是它們的特點極大地影響應(yīng)用的性能和靈活性,本文探討 arrays 和 arraylists 的重要特性,它們各自的強項和弱點,,需要的朋友可以參考下
    2023-08-08
  • 詳解Spring學習之編程式事務(wù)管理

    詳解Spring學習之編程式事務(wù)管理

    本篇文章主要介紹了詳解Spring學習之編程式事務(wù)管理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Spring?Boot?Actuator?漏洞利用小結(jié)

    Spring?Boot?Actuator?漏洞利用小結(jié)

    spring對應(yīng)兩個版本,分別是Spring Boot 2.x和Spring Boot 1.x,因此后面漏洞利用的payload也會有所不同,這篇文章主要介紹了Spring?Boot?Actuator?漏洞利用小結(jié),需要的朋友可以參考下
    2023-11-11
  • Java實現(xiàn)幾種常見排序算法代碼

    Java實現(xiàn)幾種常見排序算法代碼

    排序(Sorting) 是計算機程序設(shè)計中的一種重要操作,它的功能是將一個數(shù)據(jù)元素(或記錄)的任意序列,重新排列成一個關(guān)鍵字有序的序列
    2013-09-09
  • Java利用LocalDate進行日期處理的完全指南

    Java利用LocalDate進行日期處理的完全指南

    這篇文章主要為大家詳細介紹了Java利用LocalDate進行日期處理的詳細教程,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-03-03

最新評論