- 断点下载流程分析
1, 发送head协议获取下载文件的大小
2, 根据分段大小形成xml文件, xml文件的命令规则为文件名+_map.xml,举例如下
<download>
<Part>
<offset>0</offset>
<lenth>104857600</lenth>
<is_ok>false</is_ok>
</Part>
<Part>
<offset>104857600</offset>
<lenth>104857600</lenth>
<is_ok>false</is_ok>
</Part>
<Part>
<offset>209715200</offset>
<lenth>104857600</lenth>
<is_ok>false</is_ok>
</Part>
<Part>
<offset>314572800</offset>
<lenth>40413600</lenth>
<is_ok>false</is_ok>
</Part>
</download>
Part代表每一个块,offset带便当前的偏移量,lenth代表偏移的大小,is_ok用来标记当前块是否上传成功.
3, 开始进行上传, 每次成功下载一个文件, 下载到本地后, 便将对应的块置为true, 命令规则为:range的值 +文件名, 在这里进行下载的时候要在发送协议的时候使用range字段。
4, 下载所有分段结束后, 根据配置文件进行聚合。
5, 程序异常crush处理
在下载的过程中, 程序发生crush到时下载中断, 此时在此进行下载, 程序判断如上xml是否存在, 不存在重新生成, 存在则根据is_ok字段判断当前文件已经下载了哪些part, 如果字段的值为false, 则下载该字段, 下载完成之后进行聚合。
二. Java代码如下
见博客“断点下载java实例”