关于HTTP与FTP断点下载文件个人理解小结

首先我们来理解下HTTP与FTP的定义与不同.

一.从广义上来理解:

HTTP是Hyper Text Transfer Protocol,超文本传输协议;

FTP是File Transfer Protocol,文件传输协议;

总之简单说HTTP是面向网页的,而FTP是面向文件的。


  二.HTTP与FTP的区别

1.HTTP:

HTTP相对比较简单,只需要知道文件的路径,我们就可以使用HttpClient或HttpURLlConnection来下载文件,文件都是通过流的形式返回数据.不过鉴于Android Studio在5.0后已经不支持HttpClient了,HttpClient在Android Studio中已经过时了,建议使用HttpURLlConnection来下载文件.


   而如果我们需要实现断点下载的功能,那么就需要用到HTTP协议中的Range.在下载文件时,获取到文件的总长度与当前下载的长度,并创建一个临时文件.当我们下载暂时时,在本地保存文件的总长度与当前下载长度.继续下载文件时,使用Range,在Range用户请求头中,指定需要下载的第一字节的位置和最后一个字节的位置(第一位置指的是文件已下载开始的位置,并不是从头开始,最后一个字节位置就是文件的总长度位置),重新向服务器中请求其他已下载完的数据.而服务器会根据实现情况,返回对应的数据流(注:服务器也需要支持断点下载,不然可能会导致文件从头开始下载).


 例:文件的总长度(字节)是1000,我们暂时时,文件已经下载到了600.当我们继续下载时,Range要发送的第一位置就是601,结束位置就是文件的总长度1000.而服务器接收到Range的请求起始位置后,会从601字节开始返回数据给我们,而不会从文件的起始位置传递数据给我们.


注意:使用HTTP断点下载使用Range发送请求数据,只需要服务器支持断点下载即可,不需要后台人员做其他的操作:如该怎么接受Range,如何做接口,如何返回数据给APP等等,,都不需要.只需要提供一个文件存放在服务器的地址即可.至于为什么服务器可以根据请求参数,返回对应的数据流,我就不明白了,知道的大神可以说下原理.


我们也可以不用自己写断点下载的实现方法,网上已经有很多开源框架,实现了断点下载文件的功能.如xUtils,OkHttp及FileDownolader等等框架,内部都已经封装好了Range以及在下载时记录好了文件的总长度及当前下载的位置.当我们继续开始下载文件时,开源框架会通过Range将需要下载的位置传递给服务器,让服务器返回对应的数据流.


关于开源断点下载框架,这里推荐FileDownolader框架,这个框架不但实现了断点下载功能,而且可以实现多线程下载,且支持多页面监听下载,还可以获取文件的总长度及当前下载长度和当前下载网速.

2.FTP:

FTP相对HTTP来就就复杂多了,它并不是没有任何限制可以随意访问的.复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。 

简单来说,FTP中的文件路径是私有的,需要我们使用账号密码登录上FTP服务器的,才能下载FTP服务器中的文件.而不能像HTTP一样,获取到文件路径就可以直接下载.事实上,我们根据不能用HTTP来下载FTP上的文件,因为它俩完全是不一样的协议.


除非FTP上的文件路径变成公开的.我做的一个项目就是这样,刚开始FTP服务器上的文件都是私有的,使用HTTP的方式下载文件,直接就报错.搞了几天,都不行.后来服务器那边将FTP服务器下的文件设置为公开的,我才能使用HTTP的方式来下载文件. 而没有将文件设置为公开的话,我们只能使用FTP的方式来下载文件,需要使用账号密码先登录FTP服务器,连接上服务器后,才能再下载文件(这时使用HTTP还是不可行的).

关于下载FTP中的文件,我们可以使用ftpclient来下载文件,它内部就封装了登录账号密码的方法,我们可以在ftpclient的方法中设置账号和密码,连接成功后,再下载文件.可惜的是,不知道是ftpclient年代太久,还是不会使用,添加好下载方法后,运行编译时老是报错,提示找不到ftpclient这个类,很是郁闷.


关于实现下载的代码,我就不贴出来了,因为个人技术也有限,写出来也是贻笑大方。这篇文章也是参考了很多文章才写出来的.只能说是根据大神们的文章总结了下自己的一点经验.


在这里向大神们致敬,并贴出参考的大神们的博客文章:

参考文章:http://blog.csdn.net/guanhang89/article/details/51346790

http://blog.csdn.net/xiaoxiangzhu660810/article/details/8291656  


推荐断点下载框架

:http://www.cnblogs.com/wlfcolin/p/5001363.html       




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值