需求:
支持文件批量下载。现在有很多小图片需要批量下载,不希望在服务器打包下载。
支持大文件断点下载。比如下载10G的文件。
PC端全平台支持。Windows,macOS,Linux
全浏览器支持。ie6,ie7,ie8,ie9,ie10,ie11,edge,firefox,chrome,safari
支持文件夹结构下载。不希望在服务器打包,而是直接下载文件夹,下载后在本地文件夹结构和服务器保持一致。
支持从URL中下载文件。
支持JSON数据结构。
说明
用java实现文件的断点续传,使用了HTTP的首部字段实现,在网上看到例子,手动实现一遍,理解其原理,在这记录下
正文
要实现断点续传,要在请求中设置请求开始的位置和结束位置,在HTTP请求中设置RANGE首部字段,之后服务器如果能正常返回,返回206状态码
用java实现的关键点:
1.设置请求的首部字段,使用java的net包
2.在读取资源文件后,要保存文件,从断点处保存,使用RandAccessFile类
3.使用多线程并发的方式进行,如何正确设置起始位置
主要思路就是:
1.设置文件信息,包括文件所在的URL,文件名,文件保存的路径及文件需要分段下载的次数
2.下载时,先连接服务器,得到文件的大小,通过服务器响应的首部字段Content-Length获得,得到文件大小后,根据分段下载的次数设置每次开始的位置,结束位置。并创造一个信息临时文件,用来保存每次分段下载的起始位置,用于非第一次下载时,可以直接本地读取起始信息
3.分段下载根据开始位置,保存在下载文件的合适位置,使用RandAccessFile类的seek()方法定位
文件分块下载代码
/*
下载数据库中的文件。
更新记录:
2015-05-13创建
2017-12-09完善Range协议
*/
String fileName ="网易云音乐.exe";//客户端保存的文件名
String filePath ="d:\\文件校验工具.exe";//路径
fileName = U