Skip to content

Commit 76bc9aa

Browse files
authored
Update resumable_downloader.py
1 parent 6bda363 commit 76bc9aa

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

qcloud_cos/resumable_downloader.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ def start(self):
7474

7575
def __get_record_filename(self, bucket, key, dest_file_path):
7676
dest_file_path_md5 = hashlib.md5(dest_file_path).hexdigest()
77-
return '{0}_{1}.{2}'.format(self.__bucket, self.__key, dest_file_path_md5)
77+
key_md5 = hashlib.md5(key).hexdigest()
78+
return '{0}_{1}.{2}'.format(bucket, key_md5, dest_file_path_md5)
7879

7980
def __determine_part_size_internal(self, file_size, part_size):
8081
real_part_size = part_size * 1024 * 1024 # MB
@@ -145,11 +146,19 @@ def __load_record(self):
145146
if os.path.exists(self.__record_filepath):
146147
with open(self.__record_filepath, 'r') as f:
147148
record = json.load(f)
149+
150+
ret = self.__check_record(record)
151+
# record记录是否跟head object的一致,不一致则删除
152+
if ret == False:
153+
self.__del_record()
154+
record = None
155+
else:
148156
self.__part_size = record['part_size']
149157
self.__tmp_file = record['tmp_filename']
150158
if not os.path.exists(self.__tmp_file):
151159
record = None
152160
self.__tmp_file = None
161+
self.__del_record()
153162
else:
154163
self.__finished_parts = list(PartInfo(p['part_id'], p['start'], p['length']) for p in record['parts'])
155164
logger.debug('load record: finished parts nums: {0}'.format(len(self.__finished_parts)))
@@ -158,14 +167,20 @@ def __load_record(self):
158167
if not record:
159168
self.__tmp_file = "{file_name}_{uuid}".format(file_name=self.__dest_file_path, uuid=uuid.uuid4().hex)
160169
record = {'bucket': self.__bucket, 'key': self.__key, 'tmp_filename':self.__tmp_file,
161-
'part_size': self.__part_size, 'parts':[]}
170+
'mtime':self.__object_info['Last-Modified'], 'etag':self.__object_info['ETag'],
171+
'file_size':self.__object_info['Content-Length'], 'part_size': self.__part_size, 'parts':[]}
162172
self.__record = record
163173
self.__dump_record(record)
164174

175+
def __check_record(self, record):
176+
return record['etag'] == self.__object_info['ETag'] and\
177+
record['mtime'] == self.__object_info['Last-Modified'] and\
178+
record['file_size'] == self.__object_info['Content-Length']
179+
165180
def __del_record(self):
166-
os.remove(self.__record_filepath)
167-
logger.debug('ResumableDownLoader delete record_file, path: {0}'.format(self.__record_filepath))
168-
181+
os.remove(self.__record_filepath)
182+
logger.debug('ResumableDownLoader delete record_file, path: {0}'.format(self.__record_filepath))
183+
169184
def __check_crc(self):
170185
logger.debug('start to check crc')
171186
c64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693L, initCrc=0L, xorOut=0xffffffffffffffffL, rev=True)

0 commit comments

Comments
 (0)