FTP的断点上传与下载是一个不错的feature,尤其是对处于网络状况不稳定的服务器或者客户端来讲。查了一下RFC959的ftp协议文档,以及一些网上此功能的实现方式,简单改写了一下busybox中的ftp_send,使ftpput工具可以支持断点上传。
ftp_send默认使用“STOR”来上传文件,这种模式下,当服务器端已经存在同名文件,新上传的文件会将原同名文件覆盖。而ftp协议中的“APPE”为追加模式上传,只要在上传文件之前,询问服务器是否已经存在该文件,如果存在获取大小,然后从本地文件的相应大小偏移量开始读取发送,即可实现断点续传。测试了一下,效果还可以。
同样的道理,断点下载的过程与上传到过程相反。首先获取本地已经存在的文件大小,然后发送“REST”到服务器告诉文件的偏移量,再发送“RETR”命令,下载文件,以追加模式写入本地文件中。
另外发现,ftp服务器支持两种下载模式:主动模式与被动模式。所谓的主动模式就是客户端的上传或下载数据通道是通过服务器以主动连接客户端的方式建立的;而被动模式相反,数据通道是客户端主动连接服务器端建立的。两种工作模式主要是为了穿越防火墙,比如客户端安装了防火墙,因此外部进入的连接请求一般会被拒绝,这时候就不能选择主动模式下载或者上传,而应该采用被动模式。
阅读(4513) | 评论(1) | 转发(0) |