Я пытаюсь определить функцию, которая возобновляет загрузку, если соединение разорвано. Однако следующее не работает должным образом. В строке 8 мне нужно вручную определить размер одного блока, чтобы он работал, иначе в конечном файле будет отсутствовать ровно один размер блока каждый раз, когда я его возобновляю.
if os.path.exists(fileName):
header = requests.head(url)
fileLength = int(header.headers['Content-Length'])
if fileLength == os.path.getsize(fileName):
return True
else:
with open(fileName, 'ab') as f:
position = f.tell()-1024
pos_header = {}
print(position)
pos_header['Range'] = f'bytes={position}-'
with requests.get(url, headers = pos_header, stream = True) as r:
with open(fileName, 'ab') as f:
#some validation should be here
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(r.content)
f.flush()
print(os.path.getsize(fileName))
else:
with requests.get(url, allow_redirects=True, stream = True) as r:
with open(fileName, 'wb') as f:
iter = 0
for chunk in r.iter_content(chunk_size = 1024):
if chunk:
f.write(chunk)
f.flush()
iter += 1
if iter > 2000:
break
Интересно, что отсутствует часть, промежуточная между двумя частями загрузок. Есть ли более элегантный способ решить эту проблему, чем то, что я сделал?