Java笔记-使用RestTemplate下载大文件,并且设置下载时间
如果文件大,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下载大文件,并且设置下载时间相关推荐
- python下载大文件-golang/python 下载大文件时怎样避免oom
问题场景:高频系统中,agent 会向ATS 服务器发出刷新和预缓存的请求,这里的请求head 里面有GET ,PURGE等,因为一般的预缓存都是小文件,但是某天,突然服务器oom...罪魁祸首发现是 ...
- python下载大文件-python requests 下载大文件不完整
目前我有一个脚本, 从帝联的 CDN 外链获取一下文件作为备份. 使用的是 Python 2.7.10 requests 2.8.1 目前碰到一个情况, 使用 requests 下载大文件的时候会出现 ...
- 统计APP下载量--发现安卓下载大文件使用多线程下载方式
问题产生 在项目开发过程中,会有各种各样的需求. 而在需求开发过程中,我们常常会遇到从没有见过的问题,这就需要我们一步一步排查. 在一次版本需求中,需要统计不同渠道APP的下载量. 理想很丰满,现实很 ...
- Java8环境下使用restTemplate单/多线程下载大文件和小文件
Java8环境下使用restTemplate单/多线程下载大文件和小文件 0. 准备工作 1. 简单的下载文件 2. 单线程大文件下载 3. 多线程下载 0. 准备工作 下面使用的restTempla ...
- Java实现FTP批量大文件上传下载
用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...
- Java 使用 FTP 实现大文件上传下载
Java 上传下载 1G 以上的文件可以通过 http 协议或 ftp 实现,但是 http 协议对文件上传大小有限制,而且还不稳定,因此这里使用 ftp 上传. ftp 上传方式有两种: 一.ASC ...
- JAVA 实现多线程下载大文件
JAVA 实现多线程下载大文件 开发中遇到一个问题,下载大文件到本地,导致等待时间过长,然后就寻找一个可以多线程下载的办法,受下载软件启发,想到多线程下载, 原理,首先查到这个文件的大小,然后根据线程 ...
- Android 开发工具类 27_多线程下载大文件
多线程下载大文件时序图 FileDownloader.java 1 package com.wangjialin.internet.service.downloader; 2 3 import jav ...
- autojs下载大文件
牙叔教程 简单易懂 文件太大, 直接无响应 即使我是小米11, 我有12G的内存, 也是直接无响应了, 猜测系统不允许一下子占用这么大的内存, 或者 autojs无法申请这么大的内存 复现问题 1. ...
- 某盘提速下载工具Proxyee-down快速下载大文件
点击上方"编程精选",选择"置顶公众号" 技术文章第一时间送达! 某网盘下载大文件一直是一个痛点.现在国内基本上只有百度网盘可用了,但是免费用户使用它下载东西的 ...
最新文章
- python程序员需要掌握哪些技术-python运维要掌握哪些内容
- linux grpc,grpc linux下的编译使用-Go语言中文社区
- MySQL 读写分离 使用驱动com.mysql.jdbc.ReplicationDriver
- arma模型谱估计matlab_基于机器学习的心律失常分类(四)——心电信号特征提取[MATLAB]...
- 组件:参数验证、组件:事件传递
- java中的tcp与多线程_Java5 多线程与TCP编程实践
- (转)springcloud(一):大话Spring Cloud
- 程序设计基础要用计算机吗,计算机二级公共基础知识|程序设计基础
- Flink读数据 addSource
- HDU.1004 Let the Balloon Rise
- 记录.net使用ueditor富文本编辑器
- 现代语音信号处理之语音信号处理基础
- java分页及返回数据封装实例
- 业务安全(逻辑漏洞)
- VMware虚拟机安装win10系统
- 北京航空航天大学计算机学院保研,北京航空航天大学计算机学院(专业学位)计算机技术保研...
- windows下AS常用快捷键
- 不用身份证刷手就能坐飞机,掌静脉还能被应用在哪里领域?
- 小白如何上手几款微信小程序UI组件库
- Intellij IDEA 14 配置SVN
热门文章
- Could not find a version that satisfies the requirement skimage
- 看顶级3D角色建模师怎么使用ZBrush渲染制作人物衣物、皮肤
- 【报告分享】元宇宙“破壁人”-做虚实融合世界的赋能者-商汤智能产业研究院(附下载)
- oracle redact数据编译后 查询报错 不是selected表达式
- android常用两种适配器,Android常见设计模式五:适配器模式
- 【Springboot】集成百度地图实现定位打卡功能
- 分治算法求解棋盘覆盖问题
- 404php模板,WordPress程序设置404.php模板
- idea中方法之间添加横线
- SQLserver存储过程简单写法与设置定时执行存储过程方法