博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
断点续传
阅读量:6819 次
发布时间:2019-06-26

本文共 1082 字,大约阅读时间需要 3 分钟。

•断点续传的过程

  1)断点续传需要在下载过程中记录每天线程的下载进度

  2)每次下载开始之前先读取数据库,查询是否有未完成的记录,有就继续下载,没有则创建新的记录插入数据库

  3)在每次向文件中写入数据之后,在数据库中更新下载进度

  4)下载完成之后删除数据库中的下载记录。

  HTTP请求是由一个header的,里面有Range属性是定义下载区域的,他接收的值是一个区间范围。如:Range:bytes=0-10000;这样我们就可以按照一定的规则,将一个大文件拆分为若干很小的部分,然后分批次进行下载,每个小块下载完成之后,再合并到一个文件中。这样即使下载中断,重新下载时,也可以通过文件的字节长度来判断下载的起始点,然后重启断点续传的过程。

 

•Range一般格式:

  用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:

  Range:(unit=first byte pos)-[last byte pos] 

 

•Content-Range

  用于响应头,指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式: 

  Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth] 

 

•一个简单的断点续传下载的例子

#encoding=utf-8#python 2.7.10#xiaodeng import urllib2    req = urllib2.Request('http://www.163.com/')  req.add_header('Range', 'bytes=0-20') #断点续传的实现关键。一般断点续传时会用到Range和Content-Range实体头。res = urllib2.urlopen(req)    data = res.read()    print data  print '---------'  print 'len:%d'%len(data)
>>> req = urllib2.Request('http://www.163.com/')>>> help(req.add_header)Help on method add_header in module urllib2:add_header(self, key, val) method of urllib2.Request instance

转载地址:http://xuozl.baihongyu.com/

你可能感兴趣的文章
Kubernetes NFS存储服务的误报
查看>>
meta设置
查看>>
sed 行编辑器知识汇总
查看>>
php md5函数和字符串截取
查看>>
nginx升级OpenSSL
查看>>
C++中Timer的用法
查看>>
报表软件JS开发引用HTML DOM的location和document对象
查看>>
Windows7 Python-3.6 安装PyCrypto(pycrypto 2.6.1)出现错误以及解决方法
查看>>
《Linux学习并不难》Linux常用操作命令(14):grep命令查找文件中符合条件的字符串...
查看>>
MFC界面库BCGControlBar v25.1新版亮点四:网格控件等
查看>>
Linux下定时切割Nginx访问日志并删除指定天数前的日志记录
查看>>
zabbix 监控项目
查看>>
第三周第二节、用户密码管理及usermod、mkpasswd命令
查看>>
跨交换机实现VLAN
查看>>
27个提升效率的iOS开源库推荐
查看>>
Python的"print"函数在“Hello World”之外的延伸
查看>>
计划任务
查看>>
获取无序数组中第n大的数及快速排序算法使用
查看>>
我的友情链接
查看>>
MongoDB复制集原理
查看>>