Android FTP 多线程断点续传下载多线程断点续传下载\上传的实例上传的实例
本篇文章主要介绍了Android FTP 多线程断点续传下载上传的实例,具有一定的参考价值,有兴趣的可以了解一
下
最近在给我的开源下载框架Aria增加FTP断点续传下载和上传功能,在此过程中,爬了FTP的不少坑,终于将功能实现了,在
此把一些核心功能点记录下载。
FTP下载原理下载原理
FTP单线程断点续传单线程断点续传
FTP和传统的HTTP协议有所不同,由于FTP没有所谓的头文件,因此我们不能像HTTP那样通过设置header向服务器指定下
载区间。
但是FTP协议提供了一个更好用的命令REST用于从指定位置恢复任务,同时FTP协议也提供了一个命令SIZE用于获取下载的
文件大小,有了这两个命令,FTP断点续传也就没有什么问题。
FTP断点续传的原理和HTTP的断点续传原理差不多,在暂停时记录文件的停止位置,再次下载时,先读取记录的位置,如果
位置存在,则通过REST命令告诉服务器从指定区间进行下载。
FTP多线程断点续传多线程断点续传
多线程下载的原理和HTTP多线程下载的原理差不多。先获取文件大小,然后根据线程数,对整个文件进行分段下载,在任务
停止时,记录每一条线程的暂停位置,重新开始下载,每一条线程读取对应的下载记录,然后每一线程从指定位置开始下载。
分段下载
和HTTP所不同的是,FTP并没有提供文件区间的API,因此,FTP在分段下载中,只有起始位置而没有结束位置。
因此,你需要在指定位置手动停止线程。
功能实现功能实现
本文使用将采用apache commons-net实现FTP断点续传下载\上传功能。<br>
通过下文的几步操作,你就能很简单的实现FTP断点续传。
登录登录
FTP协议和HTTP协议有所不同,使用FTP进行下载时,你需要进行登录操作。
当然,如果你服务器没有登录功能,你可以忽略登录操作。
FTPClient client = new FTPClient();
client.connect(serverIp, port); //连接到FTP服务器
client.login(userName, passsword);
通过上面三行代码,就可以很简单的登录到FTP服务器上。
在进行登录后,还需要验证是否登录成功
int reply = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
client.disconnect();
Log.d(TAG, "无法连接到ftp服务器,错误码为:" + reply);
return;
}
由于FTP协议中,连接成功的状态有多个,因此需要通过FTPReply.isPositiveCompletion(reply)用于验证是否成功连接到FTP服务