我有多个返回zip文件的网址。大多数文件,我可以使用urllib2库下载如下:
request = urllib2.urlopen(url)
zip_file = request.read()
我遇到的问题是其中一个文件大小为35Mb(压缩),我永远无法使用此库完成下载。我可以正常使用wget和浏览器下载它。
我尝试过像这样的chuncks下载文件:
request = urllib2.urlopen(url)
buffers = []
while True:
buffer = request.read(8192)
if buffer:
buffers.append(buffer)
else:
break
final_file = ''.join(buffers)
但这也没有完成下载。不会引发错误,因此很难调试正在发生的事情。不幸的是,我不能在这里发布一个url /文件的例子。
有任何建议/意见吗?
答案 0 :(得分:2)
这是我的应用程序的复制/粘贴,它下载了自己的更新安装程序。它以块的形式读取文件,并立即将块保存在磁盘上的输出文件中。
def DownloadThreadFunc(self):
try:
url = self.lines[1]
data = None
req = urllib2.Request(url, data, {})
handle = urllib2.urlopen(req)
self.size = int(handle.info()["Content-Length"])
self.actualSize = 0
name = path.join(DIR_UPDATES, url.split("/")[-1])
blocksize = 64*1024
fo = open(name, "wb")
while not self.terminate:
block = handle.read(blocksize)
self.actualSize += len(block)
if len(block) == 0:
break
fo.write(block)
fo.close()
except (urllib2.URLError, socket.timeout), e:
try:
fo.close()
except:
pass
error("Download failed.", unicode(e))
我使用self.size
和self.actualSize
来显示GUI线程中的下载进度,并使用self.terminate
从GUI按钮取消下载(如果需要)。