Skip to content

Commit 8cb717d

Browse files
authored
Merge pull request #36 from lewzylu/add-md5-check
Add md5 check
2 parents cd148b1 + 0088ffe commit 8cb717d

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

qcloud_cos/cos_client.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import xml.etree.ElementTree
1313
from requests import Request, Session
1414
from urllib import quote
15+
from hashlib import md5
1516
from streambody import StreamBody
1617
from xml2dict import Xml2Dict
1718
from dicttoxml import dicttoxml
@@ -55,7 +56,7 @@ def __init__(self, Appid=None, Region=None, Secret_id=None, Secret_key=None, Tok
5556
if Scheme is None:
5657
Scheme = 'http'
5758
if(Scheme != 'http' and Scheme != 'https'):
58-
raise CosCosClientError('Scheme can be only set to http/https')
59+
raise CosClientError('Scheme can be only set to http/https')
5960
self._scheme = Scheme
6061

6162
# 兼容(SecretId,SecretKey)以及(AccessId,AccessKey)
@@ -440,6 +441,10 @@ def upload_part(self, Bucket, Key, Body, PartNumber, UploadId, **kwargs):
440441
auth=CosS3Auth(self._conf._secret_id, self._conf._secret_key, Key),
441442
data=Body)
442443
response = dict()
444+
logger.debug("local md5: {key}".format(key=rt.headers['ETag'][1:-1]))
445+
logger.debug("cos md5: {key}".format(key=md5(Body).hexdigest()))
446+
if md5(Body).hexdigest() != rt.headers['ETag'][1:-1]:
447+
raise CosClientError("MD5 inconsistencies")
443448
response['ETag'] = rt.headers['ETag']
444449
return response
445450

@@ -1311,7 +1316,7 @@ def copy(self, Bucket, Key, CopySource, CopyStatus='Copy', PartSize=10, MAXThrea
13111316
abort_response = self.abort_multipart_upload(Bucket=Bucket, Key=Key, UploadId=uploadid)
13121317
raise e
13131318
return rt
1314-
1319+
13151320
def append_object(self, Bucket, Key, Position, Data, **kwargs):
13161321
"""文件块追加接口
13171322
@@ -1341,7 +1346,7 @@ def append_object(self, Bucket, Key, Position, Data, **kwargs):
13411346
headers=headers)
13421347
response = rt.headers
13431348
return response
1344-
1345-
1349+
1350+
13461351
if __name__ == "__main__":
13471352
pass

0 commit comments

Comments
 (0)