java之大文件断点续传
针对某些场景下,面对服务文件大,或者服务端服务器不稳定时使用该模块。功能代码如下:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL; public class MultiFileDownLoad {
private static int position = 0;
public static void doDownLoad(String url){
File targetFile=new File(MultiFileDownLoad.class.getResource("").getFile());
targetFile=targetFile.getParentFile();
targetFile=targetFile.getParentFile();
targetFile=targetFile.getParentFile();
targetFile=targetFile.getParentFile();
targetFile=new File(targetFile.getAbsolutePath()+File.separator+ System.currentTimeMillis()+".wmv");
if(!targetFile.exists()){
try {
targetFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
//File targetFile=new File("D://video.wmv");
writeFile(url,targetFile); }
private static InputStream getInputStream(String url,long startPosition){
InputStream inputStream=null;
HttpURLConnection conn=null;
try {
URL filePath=new URL(url);
conn= (HttpURLConnection) filePath.openConnection();
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
long contentLength=conn.getContentLengthLong(); if(startPosition<contentLength){
// 设置断点续传的开始位置
conn.disconnect();
conn=(HttpURLConnection) filePath.openConnection();
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
conn.setRequestProperty("RANGE","bytes="+startPosition);
contentLength=conn.getContentLengthLong();
System.out.println(contentLength);
inputStream = conn.getInputStream();
}else {
return null;
}
}catch (Exception e){
e.printStackTrace();
}/*finally {
conn.disconnect();
}*/
return inputStream;
}
private static void writeFile(String url,File targetFile){
// 数据读写
byte[] buffer = new byte[1024*1024];
int bytesWritten = 0;
int byteCount = 0;
InputStream inputStream =null;
FileOutputStream fos=null;
long fileLength=0;
try {
fos=new FileOutputStream(targetFile,true);
fileLength=targetFile.length();
inputStream = getInputStream(url,fileLength);
while ((byteCount = inputStream.read(buffer)) != -1) {
fos.write(buffer, bytesWritten, byteCount);
}
}catch (Exception e){
//e.printStackTrace();
try {
inputStream.close();
fos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
writeFile(url,targetFile);
} }
public static void main(String[] args) {
String filepath = "http://10.84.0.6:2880/fmsdrive%2Fvideo%2F%2Fnews%2F2017%2F10%2F10%D4%C28%C8%D5%D3%CD%CC%EF%B9%E3%BD%C7.wmv";
doDownLoad(filepath);
}
}
java之大文件断点续传的更多相关文章
- java+下载+大文件断点续传
java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路:1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操 ...
- java解决大文件断点续传
第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname = ...
- java http大文件断点续传上传
因为需要研究下断点上传的问题.找了很久终于找到一个比较好的项目. 效果: 上传中,显示进度,时间,百分比. 点击[Pause]暂停,点击[Resume]继续. 2,代码分析 项目进行了封装使用最简单的 ...
- java+大文件断点续传
用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/1269085759/up6-jsp-mysq ...
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传. 在实际开发中,输入输出流用的比较少,但 ...
- 【原创】用JAVA实现大文件上传及显示进度信息
用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...
- HTML5 大文件断点续传完整思路整理
需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...
- B/S大文件断点续传
一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...
- java filechannel大文件的读写
java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/ java 读取一个 ...
随机推荐
- hibernateUtil类
package com.test.Util; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfi ...
- KM算法(运用篇)
传送门:KM算法---理解篇 最佳匹配 什么是完美匹配 如果一个二分图,X部和Y部的顶点数相等,若存在一个匹配包含X部与Y部的所有顶点,则称为完美匹配. 换句话说:若二分图X部的每一个顶点都与Y中的一 ...
- 从零开始学Linux(11)--more
more命令,是将文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空格键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还 ...
- [转]创建节约内存的JavaBean
转自:创建节约内存的JavaBean 如果编写节约内存的java对象 编写Java代码的时候,大多数情况下,我们很少关注一个Java对象究竟有多大(占据多少内存),更多的是关注业务与逻辑.但是殊不知, ...
- 【Tensorflow】 Object_detection之训练PASCAL VOC数据集
参考:Running Locally 1.检查数据.config文件是否配置好 可参考之前博客: Tensorflow Object_detection之配置Training Pipeline Ten ...
- Unity 判断Animatior是否播放完
public Animator animator; void Start() { animator = this.GetComponent<Animator>(); } void Upda ...
- git使用问题及解决方法
1. 设置pull默认rebasegit config --global pull.rebase true 2. 问题解决:Unlink of file '.git/objects/pack/pack ...
- BJFU 1549 ——Candy——————【想法题】
Candy 时间限制(C/C++):1000MS/3000MS 运行内存限制:65536KByte总提交:40 测试通过:20 描述 There are N c ...
- HRBUST 1161——Leyni——————【线段树单点更新,区间查询】
Leyni Time Limit: 3000 MS Memory Limit: 65536 KB 64-bit integer IO format: %lld , %llu Java class na ...
- 用ping命令简单的测试 延时、抖动、丢包率
在DOS命令状态下输入 :ping 202.105.135.211 -t (连续的对该IP地址执行Ping命令,直到被用户以Ctrl+C中断)就会得到下面的结果:Pinging 202.105.135 ...