製品アップデート情報
製品のお知らせ
PUT /exampleobject HTTP/1.1Host: examplebucket-1250000000.cos.ap-beijing.myqcloud.comDate: Fri, 21 Jun 2019 09:24:28 GMTContent-Type: image/jpegContent-Length: 13Content-MD5: ti4QvKtVqIJAvZxDbP/c+Q==Authorization: q-sign-algorithm=sha1&q-ak=AKID8A0fBVtYFrNm02oY1g1JQQF0c3JO****&q-sign-time=1561109068;1561116268&q-key-time=1561109068;1561116268&q-header-list=content-length;content-md5;content-type;date;host&q-url-param-list=&q-signature=998bfc8836fc205d09e455c14e3d7e623bd2****x-cos-meta-md5: b62e10bcab55a88240bd9c436cffdcf9Connection: close[Object Content]
POST /exampleobject?uploads HTTP/1.1Host: examplebucket-1250000000.cos.ap-beijing.myqcloud.comDate: Fri, 21 Jun 2019 09:45:12 GMTAuthorization: q-sign-algorithm=sha1&q-ak=AKID8A0fBVtYFrNm02oY1g1JQQF0c3JO****&q-sign-time=1561109068;1561116268&q-key-time=1561109068;1561116268&q-header-list=content-length;content-md5;content-type;date;host&q-url-param-list=&q-signature=998bfc8836fc205d09e455c14e3d7e623bd2****x-cos-meta-md5: b62e10bcab55a88240bd9c436cffdcf9
HTTP/1.1 200 OKContent-Type: application/octet-streamContent-Length: 13Connection: closeAccept-Ranges: bytesCache-Control: max-age=86400Content-Disposition: attachment; filename=example.jpgDate: Thu, 04 Jul 2019 11:33:00 GMTETag: "b62e10bcab55a88240bd9c436cffdcf9"Last-Modified: Thu, 04 Jul 2019 11:32:55 GMTServer: tencent-cosx-cos-request-id: NWQxZGUzZWNfNjI4NWQ2NF9lMWYyXzk1NjFj****x-cos-meta-md5: b62e10bcab55a88240bd9c436cffdcf9[Object Content]
# -*- coding=utf-8from qcloud_cos import CosConfigfrom qcloud_cos import CosS3Clientfrom qcloud_cos import CosServiceErrorfrom qcloud_cos import CosClientErrorimport sysimport osimport loggingimport hashliblogging.basicConfig(level=logging.INFO, stream=sys.stdout)# SecretId、SecretKey、Regionを含むユーザー属性の設定# APPIDはすでに設定から削除されていますので、パラメータのBucketにAPPIDを含めてください。BucketはBucketName-APPIDで構成されます。secret_id = os.environ['COS_SECRET_ID'] # ユーザーのSecretIdです。サブアカウントのキーを使用し、権限承認は最小権限ガイドに従って行い、使用上のリスクを低減させることをお勧めします。サブアカウントキーの取得については、https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1をご参照くださいsecret_key = os.environ['COS_SECRET_KEY'] # ユーザーのSecretKeyです。サブアカウントのキーを使用し、権限承認は最小権限ガイドに従って行い、使用上のリスクを低減させることをお勧めします。サブアカウントキーの取得については、https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1をご参照くださいregion = 'ap-beijing' # ご自身のRegionに置き換えてください。ここでは北京としますtoken = None # 一時キーのToken。一時キーの生成および使用ガイドについてはhttps://www.tencentcloud.com/document/product/436/14048?from_cn_redirect=1をご参照くださいconfig = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 設定を取得するオブジェクトclient = CosS3Client(config)
object_body = 'hello cos'#オブジェクトのmd5チェックサムを取得md5 = hashlib.md5()md5.update(object_body)md5_str = md5.hexdigest()
#オブジェクトのシンプルアップロードを行い、MD5検証を有効化しますresponse = client.put_object(Bucket='examplebucket-1250000000', #ご自身のBucket名に置き換えます。examplebucketはバケットの例、1250000000はAPPIDの例です。Body='hello cos', #アップロードするオブジェクトの内容Key='example-object-1', #アップロードするオブジェクトのKey値に置き換えますEnableMD5=True, #アップロードのMD5検証を有効化しますMetadata={ #カスタムパラメータを設定し、オブジェクトのMD5チェックサムをパラメータ値としてCOSサーバーに保存します'x-cos-meta-md5' : md5_str})print 'ETag: ' + response['ETag'] # ObjectのEtag値
#オブジェクトのダウンロードresponse = client.get_object(Bucket='examplebucket-1250000000', #ご自身のBucket名に置き換えます。examplebucketはバケットの例、1250000000はAPPIDの例です。Key='example-object-1' #ダウンロードしたオブジェクトのKey値)fp = response['Body'].get_raw_stream()download_object = fp.read() #オブジェクトの内容を取得print "get object body: " + download_objectprint 'ETag: ' + response['ETag']print 'x-cos-meta-md5: ' + response['x-cos-meta-md5'] #ユーザー定義のパラメータx-cos-meta-md5を取得
#ダウンロードオブジェクトのMD5チェックサムを計算md5 = hashlib.md5()md5.update(download_object)md5_str = md5.hexdigest()print 'download object md5: ' + md5_str#ダウンロードオブジェクトのMD5チェックサムとアップロードオブジェクトのMD5チェックサムを比較し、オブジェクトの整合性を検証しますif md5_str == response['x-cos-meta-md5']:print 'MD5 check OK'else:print 'MD5 check FAIL'
OBJECT_PART_SIZE = 1024 * 1024 #シミュレートした各パートのサイズOBJECT_TOTAL_SIZE = OBJECT_PART_SIZE * 1 + 123 #オブジェクト全体のサイズobject_body = '1' * OBJECT_TOTAL_SIZE #オブジェクトの内容#オブジェクト内容全体のMD5チェックサムを計算md5 = hashlib.md5()md5.update(object_body)md5_str = md5.hexdigest()
#マルチパートアップロードの初期化response = client.create_multipart_upload(Bucket='examplebucket-1250000000', #ご自身のBucket名に置き換えます。examplebucketはバケットの例、1250000000はAPPIDの例です。Key='exampleobject-2', #アップロードするオブジェクトのKey値に置き換えますStorageClass='STANDARD', #オブジェクトのストレージクラスMetadata={'x-cos-meta-md5' : md5_str #カスタムパラメータの設定、MD5チェックサムに設定})#マルチパートアップロードのUploadIdを取得upload_id = response['UploadId']
#マルチパートアップロードオブジェクト。各パートのサイズがOBJECT_PART_SIZEであり、最後のパートはOBJECT_PART_SIZE未満とすることができますpart_list = list()position = 0left_size = OBJECT_TOTAL_SIZEpart_number = 0while left_size > 0:part_number += 1if left_size >= OBJECT_PART_SIZE:body = object_body[position:position+OBJECT_PART_SIZE]else:body = object_body[position:]position += OBJECT_PART_SIZEleft_size -= OBJECT_PART_SIZE#パートアップロードresponse = client.upload_part(Bucket='examplebucket-1250000000', #ご自身のBucket名に置き換えます。examplebucketはバケットの例、1250000000はAPPIDの例です。Key='exampleobject-2', #オブジェクトのKey値Body=body,PartNumber=part_number,UploadId=upload_id,EnableMD5=True #パート検証を有効化します。COSサーバーが各パートに対しMD5検証を行います。)etag = response['ETag'] #ETagは各パートのMD5値を表しますpart_list.append({'ETag' : etag, 'PartNumber' : part_number})print etag + ', ' + str(part_number)
#マルチパートアップロードの完了response = client.complete_multipart_upload(Bucket='examplebucket-1250000000', #ご自身のBucket名に置き換えます。examplebucketはバケットの例、1250000000はAPPIDの例です。Key='exampleobject-2', #オブジェクトのKey値UploadId=upload_id,MultipartUpload={ #各パートのETagとPartNumberそれぞれの対応が必要'Part' : part_list},)#ETagは合体後のオブジェクトの一意のタグ値を表すもので、この値はオブジェクトのMD5チェックサムではなく、オブジェクトの一意性のチェックのみに用いられます。print "ETag: " + response['ETag']print "Location: " + response['Location'] #URLアドレスprint "Key: " + response['Key']
# オブジェクトのダウンロードresponse = client.get_object(Bucket='examplebucket-1250000000', #ご自身のBucket名に置き換えます。examplebucketはバケットの例、1250000000はAPPIDの例です。Key='exampleobject-2' #オブジェクトのKey値)print 'ETag: ' + response['ETag'] #オブジェクトのETagはオブジェクト内容のMD5チェックサムではありませんprint 'x-cos-meta-md5: ' + response['x-cos-meta-md5'] #ユーザー定義のパラメータx-cos-meta-md5を取得
#ダウンロードオブジェクトのMD5チェックサムを計算fp = response['Body'].get_raw_stream()DEFAULT_CHUNK_SIZE = 1024*1024md5 = hashlib.md5()chunk = fp.read(DEFAULT_CHUNK_SIZE)while chunk:md5.update(chunk)chunk = fp.read(DEFAULT_CHUNK_SIZE)md5_str = md5.hexdigest()print 'download object md5: ' + md5_str#ダウンロードオブジェクトのMD5チェックサムとアップロードオブジェクトのMD5チェックサムを比較し、オブジェクトの整合性を検証しますif md5_str == response['x-cos-meta-md5']:print 'MD5 check OK'else:print 'MD5 check FAIL'
フィードバック