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

SpringBoot使用RestTemplate如何通過(guò)http請(qǐng)求將文件下載到本地

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

背景

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

思路

因?yàn)闆](méi)有提供批量下載接口,同時(shí)下載的資源需要自己篩選,想著這樣人工處理特別麻煩,個(gè)人也沒(méi)有什么進(jìn)步,就想著寫(xiě)一段代碼處理,這樣處理起來(lái)準(zhǔn)確,效率高,后續(xù)有類(lèi)似的任務(wù)還可以將這段代碼改改后繼續(xù)使用。

1.篩選

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

2.下載

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

實(shí)現(xiàn)方式

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


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

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

            // 確保目錄存在
            File outputFile = new File(outputPath);
            File parentDir = outputFile.getParentFile();
            // 文件存在校驗(yàn)
            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());
        }
    }
  • 實(shí)體類(lèi)(可以自己定義)
@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";
        //請(qǐng)求頭
        HttpHeaders headers = new HttpHeaders();
        headers.set("xxx","xxxxx");
        //請(qǐng)求參數(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)這種報(bào)錯(cuò)是必須指定的具體的文件,而不是文件夾,同時(shí)盡量保證存放文件的文件夾必須存在

總結(jié)

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

相關(guān)文章

最新評(píng)論

翁源县| 延安市| 海淀区| 错那县| 东兴市| 田阳县| 桂阳县| 日土县| 湖口县| 治县。| 清水河县| 柞水县| 扶绥县| 东莞市| 嘉善县| 麦盖提县| 丁青县| 潜山县| 垣曲县| 阜康市| 开鲁县| 台江县| 无极县| 舒城县| 桂林市| 沅陵县| 东乌珠穆沁旗| 江孜县| 平乡县| 九江市| 中山市| 榕江县| 昭通市| 沾益县| 新竹市| 蒙自县| 通化县| 桦甸市| 内丘县| 牟定县| 郎溪县|