すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:データ検証

最終更新日:Feb 21, 2024

Object Storage Service (OSS) SDK for Javaは、MD5の検証とCRC-64を使用して、オブジェクトのアップロード、ダウンロード、コピー時にデータの整合性を確保します。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。

MD5検証

オブジェクトのアップロード要求でContent-MD5を設定すると、アップロードされたオブジェクトのMD5ハッシュが計算されます。 計算されたMD5ハッシュがアップロード要求で設定されたMD5ハッシュと異なる場合、InvalidDigestが返されます。 これにより、OSSはオブジェクトのアップロードのデータ整合性を確保できます。 InvalidDigestが返された場合は、オブジェクトを再度アップロードする必要があります。

次のサンプルコードは、PutObject操作でMD5検証を設定する方法の例を示しています。

# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 例: examplebucket. 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
# オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
object_name = 'exampledir/exampleobject.txt'
# アップロードするローカルファイルのフルパスを指定します。 アップロード中に、この変数の値がOSSにアップロードされます。 この値は、テキスト、画像、ビデオ、オーディオなど、任意の形式にすることができます。 
ファイルとしてオープン ('/Users/test/Desktop/demo.txt' 、'rb') を持つ:
    content = file.read()

# 実際のコンテンツに基づいて値のMD5ハッシュを計算します。 
content_md5 = oss2.utils.content_md5 (コンテンツ);
プリント ('content_md5', content_md5)

# アップロードリクエストにContent-MD5ヘッダーを含めます。 サーバーは、アップロードされたコンテンツのMD5ハッシュを検証して、アップロードされたコンテンツの完全性と有効性を保証します。 
headers = dict()
ヘッダー ['Content-MD5'] = content_md5
bucket.put_object(object_name, content, headers=headers) 
説明

MD5検証は、put_object、append_object、post_object、およびupload_part操作に使用できます。

CRC-64

データの検証CRC-64を実行するときは、次の項目に注意してください。

説明
  • CRC-64は、put_object、get_object、append_object、およびupload_part操作に使用できます。 デフォルトでは、オブジェクトをアップロードするとCRC-64が有効になります。 クライアントで計算されたCRC-64値がOSSサーバーから返されたCRC-64値と異なる場合、InconsistentErrorが返されます。

  • CRC-64は範囲ダウンロードではサポートされていません。

  • CRC-64はCPUリソースを消費し、アップロードとダウンロードを遅くします。

  • オブジェクトのダウンロードのCRC-64

    次のコードは、オブジェクトをダウンロードするときにCRC-64を実行する方法の例を示しています。

    # -*-コーディング: utf-8 -*-
    oss2のインポート
    oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
    # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    # バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
    # バケットの名前を指定します。 例: examplebucket. 
    bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
    # オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
    object_name = 'yourObjectName'
    
    # デフォルトでCRC-64が有効になっているかどうかを確認します。 
    print('bucket.enable-crc:', bucket.enable_crc)
    
    # bucket.get_objectによって返される値は、繰り返し処理できるファイルのようなオブジェクトです。 
    object_stream = bucket.get_object(object_name)
    プリント (object_stream.read())
    
    # オブジェクトのCRC-64チェックサムを計算する前に、get_objectによって返されるストリームからオブジェクトを読み取るには、read() を呼び出す必要があります。 
    object_stream.client_crcの場合! =object_stream.server_crc:
      印刷 (「クライアントとサーバー間のCRCチェックサムに矛盾があります! 」) 
  • 追加アップロードのCRC-64

    追加アップロードでinit_crcを指定すると、CRC-64はデフォルトで有効になります。

    # -*-コーディング: utf-8 -*-
    oss2のインポート
    oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
    # 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
    # バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
    # バケットの名前を指定します。 例: examplebucket. 
    bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
    
    object_name = "yourAppendObjectName"
    first_content = "yourFirstContent"
    second_content = "yourSecondContent"
    
    # 最初の追加アップロードでinit_crcを指定します。 
    # init_crcが指定されている場合、OSS SDKは返された結果のCRC-64を実行します。 
    result = bucket.append_object(object_name, 0, first_content, init_crc=0)
    
    #2番目の追加アップロードでinit_crcを指定します。 
    # init_crcをアップロードされたオブジェクトのCRC-64値に設定します。 
    result = bucket.append_object(object_name, result.next_position, second_content, init_crc=result.crc) 

参考資料

MD5の検証とCRC-64に使用される完全なサンプルコードについては、GitHubをご覧ください。