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

Object Storage Service:データ検証 (Python SDK V1)

最終更新日:Nov 29, 2025

OSS は、オブジェクトのアップロード、ダウンロード、コピー時のデータ整合性を保証するため、データ検証の方法として MD5 および 64 ビット巡回冗長検査 (CRC-64) を提供します。

注意事項

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

  • このトピックでは、アクセス認証情報は環境変数から取得します。アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用してアクセス認証情報を設定する」をご参照ください。

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

MD5 検証

ファイルをアップロードする際、`Content-MD5` ヘッダーを設定してデータ整合性を保証できます。OSS は受信したコンテンツの MD5 ハッシュを計算します。OSS によって計算された MD5 ハッシュが、指定された MD5 ハッシュと一致しない場合、OSS は `InvalidDigest` エラーを返します。このエラーが発生した場合は、ファイルを再度アップロードする必要があります。

ファイルをアップロードする際に MD5 検証を実行します。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが所在するリージョンのエンドポイントを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントに対応するリージョンを指定します。例えば、cn-hangzhou です。このパラメーターは v4 署名に必須です。
region = "cn-hangzhou"

# examplebucket を実際のバケット名に置き換えます。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めることはできません。例:exampledir/exampleobject.txt。
object_name = 'exampledir/exampleobject.txt'
# アップロードするファイルのローカルパスを指定します。この変数の値は、アップロードするコンテンツとして OSS に転送されます。ファイルは、テキスト、イメージ、ビデオ、オーディオなど、任意のタイプが可能です。
with open('/Users/test/Desktop/demo.txt', 'rb') as file:
    content = file.read()

# アップロードするコンテンツの MD5 ハッシュを計算します。
content_md5 = oss2.utils.content_md5(content)
print('content_md5', content_md5)

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

MD5 検証は、`put_object`、`append_object`、`post_object`、および `upload_part` でサポートされています。

CRC-64 検証

巡回冗長検査 (CRC) を使用してデータ検証を行う場合は、次の点にご注意ください。

説明
  • CRC-64 検証は、`put_object`、`get_object`、`append_object`、および `upload_part` でサポートされています。CRC 検証は、ファイルのアップロード時にデフォルトで有効になっています。クライアントによって計算された CRC 値がサーバーから返された CRC 値と一致しない場合、`InconsistentError` 例外がスローされます。

  • 範囲ダウンロードは CRC-64 検証をサポートしていません。

  • CRC-64 検証は CPU リソースを消費するため、アップロードおよびダウンロードの速度に影響を与える可能性があります。

  • ダウンロード時の CRC-64 検証

    次のコードは、ファイルをダウンロードする際に CRC-64 データ整合性検証を実行する方法を示しています。

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    # 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # バケットが所在するリージョンのエンドポイントを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    # エンドポイントに対応するリージョンを指定します。例えば、cn-hangzhou です。このパラメーターは v4 署名に必須です。
    region = "cn-hangzhou"
    
    # examplebucket を実際のバケット名に置き換えます。
    bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
    
    # オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めることはできません。
    object_name = 'yourObjectName'
    
    # CRC 検証がデフォルトで有効になっているかどうかを確認します。
    print('bucket.enable-crc:',  bucket.enable_crc)
    
    # bucket.get_object の戻り値はファイルライクオブジェクトであり、イテラブルでもあります。
    object_stream = bucket.get_object(object_name)
    print(object_stream.read())
    
    # get_object 操作はストリームを返すため、返されたオブジェクトデータの CRC チェックサムを計算する前に read() を呼び出す必要があります。したがって、この操作を呼び出した後に CRC 検証を実行します。
    if object_stream.client_crc != object_stream.server_crc:
      print("The CRC checksum between client and server is inconsistent!")
  • 追加アップロード時の CRC-64 検証

    追加アップロードの場合、`init_crc` パラメーターを指定すると、CRC-64 検証がデフォルトで有効になります。

    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    # 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # バケットが所在するリージョンのエンドポイントを指定します。例えば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
    endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
    # エンドポイントに対応するリージョンを指定します。例えば、cn-hangzhou です。このパラメーターは v4 署名に必須です。
    region = "cn-hangzhou"
    
    # examplebucket を実際のバケット名に置き換えます。
    bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
    
    object_name = "yourAppendObjectName"
    first_content = "yourFirstContent"
    second_content = "yourSecondContent"
    
    # 最初の追加アップロード。
    # init_crc が指定されている場合、SDK はデフォルトで返された結果に対して CRC 検証を実行します。
    result = bucket.append_object(object_name, 0, first_content, init_crc=0)
    
    # 2 回目の追加アップロード。
    # init_crc をアップロードされたデータの CRC 値に設定します。
    result = bucket.append_object(object_name, result.next_position, second_content, init_crc=result.crc)

関連ドキュメント

データ検証の完全なサンプルコードについては、「GitHub の例」をご参照ください。