2024-04-26 19:11:03 发布
网友
我正在尝试为Linux创建一个“下载管理器”,它允许我使用多个线程下载一个文件。这就是我要做的:
第2步和第3步是可解的,而在第1步我被卡住了。下载文件时如何指定偏移量?在
使用open("/path/to/file", "wb").write(urllib2.urlopen(url).read())这样的代码并不能让我指定要读取的起始点。有没有别的办法?在
open("/path/to/file", "wb").write(urllib2.urlopen(url).read())
要下载部分文件,只需将Range头设置为如下所示
Range
req = urllib2.Request(url) req.headers['Range'] = 'bytes=%s-%s' % (start, end) f = urllib2.urlopen(req)
但并非所有服务器都支持Range头。大多数文件共享服务没有
首先,http服务器应该返回Content-Length头。这通常意味着文件是一个静态文件,如果是动态文件,比如php或jsp的结果,就不能做这样的拆分。在
然后,可以在请求时使用http范围头,这个头告诉服务器文件的哪个部分应该返回。关于如何设置和解析http头部,请参阅python文档。在
要做到这一点,如果零件尺寸是100k,你首先请求的范围为:0-1000000 100k将得到第一个零件,并在其内容长度的响应中告诉你文件的大小,然后启动一些不同范围的线程,它就可以工作了
看到了吗文件.seek在http://docs.python.org/library/stdtypes.html#file-objects中。在
这也许能解决问题。在
出于兴趣,拆分文件的原因是什么?在
要下载部分文件,只需将
Range
头设置为如下所示但并非所有服务器都支持
Range
头。大多数文件共享服务没有首先,http服务器应该返回Content-Length头。这通常意味着文件是一个静态文件,如果是动态文件,比如php或jsp的结果,就不能做这样的拆分。在
然后,可以在请求时使用http范围头,这个头告诉服务器文件的哪个部分应该返回。关于如何设置和解析http头部,请参阅python文档。在
要做到这一点,如果零件尺寸是100k,你首先请求的范围为:0-1000000 100k将得到第一个零件,并在其内容长度的响应中告诉你文件的大小,然后启动一些不同范围的线程,它就可以工作了
看到了吗文件.seek在http://docs.python.org/library/stdtypes.html#file-objects中。在
这也许能解决问题。在
出于兴趣,拆分文件的原因是什么?在
相关问题 更多 >
编程相关推荐