如果文件大,Java会报OOM(out of memory)。使用ResponseExtractor将远程服务器中的文件直接转成流存到文件中,而不放到内存。

事例代码如下:

@GetMapping("/test-download-v3")
public void downloadFile() throws IOException {String url = "http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg";// Optional Accept headerRequestCallback requestCallback = request -> request.getHeaders().setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM, MediaType.ALL));// Streams the response instead of loading it all in memoryResponseExtractor<Void> responseExtractor = response -> {// Here you can write the inputstream to a file or any other placePath 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 = "http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.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("C:\\Users\\cff\\Desktop\\downloadv3.jpg");Files.copy(response.getBody(), path);return null;};restTemplate.execute(url, HttpMethod.GET, requestCallback, responseExtractor);}catch (Exception e){e.printStackTrace();}finally {}System.out.println("over");

如下:

这里可以在异常里面捕获,然后发送邮件,给客户,说着玩意下不下来。

Java笔记-使用RestTemplate下载大文件,并且设置下载时间相关推荐

  1. python下载大文件-golang/python 下载大文件时怎样避免oom

    问题场景:高频系统中,agent 会向ATS 服务器发出刷新和预缓存的请求,这里的请求head 里面有GET ,PURGE等,因为一般的预缓存都是小文件,但是某天,突然服务器oom...罪魁祸首发现是 ...

  2. python下载大文件-python requests 下载大文件不完整

    目前我有一个脚本, 从帝联的 CDN 外链获取一下文件作为备份. 使用的是 Python 2.7.10 requests 2.8.1 目前碰到一个情况, 使用 requests 下载大文件的时候会出现 ...

  3. 统计APP下载量--发现安卓下载大文件使用多线程下载方式

    问题产生 在项目开发过程中,会有各种各样的需求. 而在需求开发过程中,我们常常会遇到从没有见过的问题,这就需要我们一步一步排查. 在一次版本需求中,需要统计不同渠道APP的下载量. 理想很丰满,现实很 ...

  4. Java8环境下使用restTemplate单/多线程下载大文件和小文件

    Java8环境下使用restTemplate单/多线程下载大文件和小文件 0. 准备工作 1. 简单的下载文件 2. 单线程大文件下载 3. 多线程下载 0. 准备工作 下面使用的restTempla ...

  5. Java实现FTP批量大文件上传下载

    用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...

  6. Java 使用 FTP 实现大文件上传下载

    Java 上传下载 1G 以上的文件可以通过 http 协议或 ftp 实现,但是 http 协议对文件上传大小有限制,而且还不稳定,因此这里使用 ftp 上传. ftp 上传方式有两种: 一.ASC ...

  7. JAVA 实现多线程下载大文件

    JAVA 实现多线程下载大文件 开发中遇到一个问题,下载大文件到本地,导致等待时间过长,然后就寻找一个可以多线程下载的办法,受下载软件启发,想到多线程下载, 原理,首先查到这个文件的大小,然后根据线程 ...

  8. Android 开发工具类 27_多线程下载大文件

    多线程下载大文件时序图 FileDownloader.java 1 package com.wangjialin.internet.service.downloader; 2 3 import jav ...

  9. autojs下载大文件

    牙叔教程 简单易懂 文件太大, 直接无响应 即使我是小米11, 我有12G的内存, 也是直接无响应了, 猜测系统不允许一下子占用这么大的内存, 或者 autojs无法申请这么大的内存 复现问题 1. ...

  10. 某盘提速下载工具Proxyee-down快速下载大文件

    点击上方"编程精选",选择"置顶公众号" 技术文章第一时间送达! 某网盘下载大文件一直是一个痛点.现在国内基本上只有百度网盘可用了,但是免费用户使用它下载东西的 ...

最新文章

  1. python程序员需要掌握哪些技术-python运维要掌握哪些内容
  2. linux grpc,grpc linux下的编译使用-Go语言中文社区
  3. MySQL 读写分离 使用驱动com.mysql.jdbc.ReplicationDriver
  4. arma模型谱估计matlab_基于机器学习的心律失常分类(四)——心电信号特征提取[MATLAB]...
  5. 组件:参数验证、组件:事件传递
  6. java中的tcp与多线程_Java5 多线程与TCP编程实践
  7. (转)springcloud(一):大话Spring Cloud
  8. 程序设计基础要用计算机吗,计算机二级公共基础知识|程序设计基础
  9. Flink读数据 addSource
  10. HDU.1004 Let the Balloon Rise
  11. 记录.net使用ueditor富文本编辑器
  12. 现代语音信号处理之语音信号处理基础
  13. java分页及返回数据封装实例
  14. 业务安全(逻辑漏洞)
  15. VMware虚拟机安装win10系统
  16. 北京航空航天大学计算机学院保研,北京航空航天大学计算机学院(专业学位)计算机技术保研...
  17. windows下AS常用快捷键
  18. 不用身份证刷手就能坐飞机,掌静脉还能被应用在哪里领域?
  19. 小白如何上手几款微信小程序UI组件库
  20. Intellij IDEA 14 配置SVN

热门文章

  1. Could not find a version that satisfies the requirement skimage
  2. 看顶级3D角色建模师怎么使用ZBrush渲染制作人物衣物、皮肤
  3. 【报告分享】元宇宙“破壁人”-做虚实融合世界的赋能者-商汤智能产业研究院(附下载)
  4. oracle redact数据编译后 查询报错 不是selected表达式
  5. android常用两种适配器,Android常见设计模式五:适配器模式
  6. 【Springboot】集成百度地图实现定位打卡功能
  7. 分治算法求解棋盘覆盖问题
  8. 404php模板,WordPress程序设置404.php模板
  9. idea中方法之间添加横线
  10. SQLserver存储过程简单写法与设置定时执行存储过程方法