Java如何使用RestTemplate下载大文件(并设置下载时间)呢?

陈欣 Java经验 发布时间:2023-08-30 09:22:34 阅读数:18511 1
下文笔者讲述RestTemplate下载大文件的方法及示例分享,如下所示
当我们下载大文件时,有时会报OOM(out of memory)
    那么此时我们 应该如何处理呢?
    我们需
   使用ResponseExtractor将远程服务器中的文件直接转成流存到文件中
         而不应该放到内存中
RestTemplate下载大文件的示例
@GetMapping("/test-download-v3")
public void downloadFile() throws IOException {
    String url = "https://img.java265.com/test.jpg";
    // Optional Accept header
    RequestCallback requestCallback = request -> request
            .getHeaders()
            .setAccept(Arrays.aslist(MediaType.APPLICATION_OCTET_STREAM, MediaType.ALL));
 
    // Streams the response instead of loading it all in memory
    ResponseExtractor<Void> responseExtractor = response -> {
        // Here you can write the inputstream to a file or any other place
        Path path = Paths.get("downloadv3.jpg");
        Files.copy(response.getBody(), path);
        return null;
    };
    restTemplate.execute(url, HttpMethod.GET, requestCallback, responseExtractor);
}
有些网站
   刚开始是1MB/s
   后面直接是1B/s
  此时需设置下载时间
     如:
    5分钟没下载好,就禁止下载

       String url = "https://img.java265.com/test.jpg";
 
        SimpleClientHttpRequestFactory httpFactory = new SimpleClientHttpRequestFactory();
        httpFactory.setReadTimeout(1);
        restTemplate.setRequestFactory(httpFactory);
 
        try{
 
            RequestCallback requestCallback = request -> request.getHeaders().setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM, MediaType.ALL));
            ResponseExtractor<Void> responseExtractor = response -> {
 
                Path path = Paths.get("D:\\test.jpg");
                Files.copy(response.getBody(), path);
                return null;
            };
            restTemplate.execute(url, HttpMethod.GET, requestCallback, responseExtractor);
        }
        catch (Exception e){
 
            e.printStackTrace();
        }
        finally {
 
        }
 
        System.out.println("下载超时!");
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202308/16933585887283.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者