1、断点下载的原理
在此处,我们用 tomcat做为服务器,tomcat支持断点续传功能。
我们知道 Range: 用于客户端到服务器端的请求,可通过该字段指定下载文件的某一段大小,及其单位。
典型的格式如:
Range: bytes=0-499 下载第0-499字节范围的内容
Range: bytes=500-999 下载第500-999字节范围的内容
Range: bytes=-500 下载最后500字节的内容
Range: bytes=500- 下载从第500字节开始到文件结束部分的内容(这是最常用的一种格式)
Range: bytes=0-0,-1 下载第一以及最后一个字节的内容。
因此,我们可以知道只要向服务器发送http请求文件下载,在http的协议头上面,添加这个标签。接收的数据流就是这段的,字节的数据。
获取数据流的请求头:
//使用Get方式下载
HttpURLConnection http = (HttpURLConnection) downUrl.openConnection();
http.setConnectTimeout(5 * 1000);
http.setRequestMethod("GET");
http.setRequestProperty("Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
http.setRequestProperty("Accept-Language", "zh-CN");
http.setRequestProperty("Referer", downUrl.toString());
http.setRequestProperty("Charset", "UTF-8");
int startPos = block * (threadId - 1) + downLength;//开始位置
int endPos = block * threadId -1;//结束位置
http.setRequestProperty("Range", "bytes=" + startPos + "-"+ endPos);//设置获取实体数据的范围
http.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
http.setRequestProperty("Connection", "Keep-Alive");
InputStream inStream = http.getInputStream();
这样,inStream的数据流,便是 发送到服务器请求要收到的数据流段。
这个,数据流,就可以这样 ,一个在服务器端,与客服端的数据流的相对应的数据流的段流动。(这个range就是key)。
2、用现成的类库,简单的调用多线程断点下载。
FileDownloader loaDownloader=new FileDownloader(getApplicationContext(), filePathUrl, sdcard, 5);
progressBar.setMax(loaDownloader.getFileSize());
//textView.setText(text)
try {
loaDownloader.download(new DownloadProgressListener() {
public void onDownloadSize(int size) {
Message msg = new Message();
msg.what = 1;
msg.getData().putInt("size", size);
handler.sendMessage(msg);//发送消息
}
});
} catch (Exception e) {
// TODO: handle exception
}
svn服务器代码位置:http://my-project-android2012.googlecode.com/svn/MulThreadDownloader/
Android之断点续传下载