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

Object Storage Service:OSS SDK for Python 2.0 を使用したオブジェクトメタデータの管理

最終更新日:Aug 05, 2025

このトピックでは、OSS SDK for Python を使用してオブジェクトメタデータを構成およびクエリする方法について説明します。

注意事項

  • このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID cn-hangzhou を使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。バケットが配置されているのと同じリージョン内の他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報を構成する方法の詳細については、「アクセス認証情報の構成」をご参照ください。

  • オブジェクトメタデータを設定するには、oss:PutObject 権限が必要です。オブジェクトメタデータをクエリするには、oss:GetObject 権限が必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。

オブジェクトのアップロード中にオブジェクトメタデータを構成する

オブジェクトのアップロード中にオブジェクトメタデータを構成する

次のサンプルコードは、PutObject を使用してオブジェクトをアップロードし、有効期限、アクセス制御リスト (ACL)、および一部のユーザーメタデータなどのオブジェクトメタデータヘッダーを構成します。他のアップロード API 操作を使用する場合も、同様にオブジェクトメタデータを構成できます。

import argparse
import requests
import alibabacloud_oss_v2 as oss

from alibabacloud_oss_v2.models import (
    PutObjectRequest, GetObjectRequest, DeleteObjectRequest,
    ListObjectsRequest, PutBucketRequest, GetBucketAclRequest
    # 必要なその他のクラス。
)

# コマンドラインパラメータパーサーを作成します。
parser = argparse.ArgumentParser(description="put object sample")
# --region パラメータを指定して、バケットが配置されているリージョンを示します。このパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメータを指定して、バケットの名前を示します。このコマンドラインパラメータは必須です。
parser.add_argument('--bucket', help='バケットの名前。', required=True)
# --endpoint パラメータを指定して、バケットが配置されているリージョンのエンドポイントを示します。このパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
# --key パラメータを指定して、オブジェクトの名前を示します。このパラメータは必須です。
parser.add_argument('--key', help='オブジェクトの名前。', required=True)

def main():
    args = parser.parse_args()  # コマンドラインパラメータを解析します。

    # 認証のために環境変数からアクセス認証情報を取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を読み込み、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # バケットが配置されているリージョンを指定します。
    cfg.region = args.region
    # エンドポイントが提供されている場合は、構成オブジェクトにエンドポイントを指定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 構成を使用して OSSClient インスタンスを作成します。
    client = oss.Client(cfg)

    # アップロードする文字列を指定します。
    text_string = "Hello, OSS!"
    data = text_string.encode('utf-8')  # UTF-8 エンコーディングを使用して文字列をエンコードします。

    # オブジェクトをアップロードするリクエストを実行します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
        metadata={
            'key1': 'value1',
            'key2': 'value2'
        }
    ))

    # HTTP ステータスコード、リクエスト ID、MD5 ハッシュ、ETag、CRC-64 値、およびオブジェクトバージョン ID を表示して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main() # スクリプトのエントリポイント。スクリプトが直接実行されると、main 関数が呼び出されます。

オブジェクトメタデータのクエリ

HeadObject メソッドを使用してオブジェクトのすべてのメタデータをクエリする

次のサンプルコードは、HeadObject メソッドを使用してオブジェクトのすべてのメタデータをクエリします。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。
parser = argparse.ArgumentParser(description="head object sample")

# --region パラメータを指定して、バケットが配置されているリージョンを示します。このパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメータを指定して、バケットの名前を示します。このコマンドラインパラメータは必須です。
parser.add_argument('--bucket', help='バケットの名前。', required=True)
# --endpoint パラメータを指定して、バケットが配置されているリージョンのエンドポイントを示します。このパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
# --key パラメータを指定して、オブジェクトの名前を示します。このパラメータは必須です。
parser.add_argument('--key', help='オブジェクトの名前。', required=True)

def main():
    # コマンドラインパラメータを解析します。
    args = parser.parse_args()

    # 認証のために環境変数からアクセス認証情報を取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # デフォルト構成を使用して構成オブジェクト (cfg) を作成し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # cfg オブジェクトの region 属性をパーサーのリージョンに設定します。
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、cfg オブジェクトの endpoint 属性を提供されたエンドポイントで更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して、OSSClient インスタンスを初期化します。
    client = oss.Client(cfg)

    # オブジェクトのヘッダーを取得するリクエストを送信します。
    result = client.head_object(oss.HeadObjectRequest(
        bucket=args.bucket,           # バケット名を指定します。
        key=args.key,                 # オブジェクトキーを指定します。
    ))

    # 結果の詳細を出力します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content length: {result.content_length},'
          f' content type: {result.content_type},'
          f' etag: {result.etag},'
          f' last modified: {result.last_modified},'
          f' content md5: {result.content_md5},'
          f' cache control: {result.cache_control},'
          f' content disposition: {result.content_disposition},'
          f' content encoding: {result.content_encoding},'
          f' expires: {result.expires},'
          f' hash crc64: {result.hash_crc64},'
          f' storage class: {result.storage_class},'
          f' object type: {result.object_type},'
          f' version id: {result.version_id},'
          f' tagging count: {result.tagging_count},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' server side encryption key id: {result.server_side_encryption_key_id},'
          f' next append position: {result.next_append_position},'
          f' expiration: {result.expiration},'
          f' restore: {result.restore},'
          f' process status: {result.process_status},'
          f' request charged: {result.request_charged},'
          f' allow origin: {result.allow_origin},'
          f' allow methods: {result.allow_methods},'
          f' allow age: {result.allow_age},'
          f' allow headers: {result.allow_headers},'
          f' expose headers: {result.expose_headers},'
          )

# スクリプトが直接実行されたときに main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイントを指定します。制御フローはここから開始されます。

GetObjectMeta メソッドを使用してオブジェクトの部分メタデータをクエリする

説明

GetObjectMeta メソッドを使用すると、返されるコンテンツの長さ (ContentLength)、エンティティタグ (ETag)、最終更新時刻 (LastModified)、最終アクセス時刻 (LastAccessTime)、バージョン ID (VersionId)、および CRC-64 ハッシュ (HashCRC64) を含む、オブジェクトの部分メタデータのみをクエリできます。

次のサンプルコードは、GetObjectMeta メソッドを使用してオブジェクトの部分メタデータをクエリします。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。
parser = argparse.ArgumentParser(description="get object meta sample")

# --region パラメータを指定して、バケットが配置されているリージョンを示します。このパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメータを指定して、バケットの名前を示します。このコマンドラインパラメータは必須です。
parser.add_argument('--bucket', help='バケットの名前。', required=True)
# --endpoint パラメータを指定して、バケットが配置されているリージョンのエンドポイントを示します。このパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
# --key パラメータを指定して、オブジェクトの名前を示します。このパラメータは必須です。
parser.add_argument('--key', help='オブジェクトの名前。', required=True)

def main():
    # コマンドラインパラメータを解析します。
    args = parser.parse_args()

    # 認証のために環境変数からアクセス認証情報を取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # デフォルト構成を使用して構成オブジェクト (cfg) を作成し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # cfg オブジェクトの region 属性をパーサーのリージョンに設定します。
    cfg.region = args.region

    # カスタムエンドポイントが提供されている場合は、cfg オブジェクトの endpoint 属性を提供されたエンドポイントで更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 前述の構成を使用して、OSSClient インスタンスを初期化します。
    client = oss.Client(cfg)

    # オブジェクトのメタデータを取得するリクエストを送信します。
    result = client.get_object_meta(oss.GetObjectMetaRequest(
        bucket=args.bucket,           # バケット名を指定します。
        key=args.key,                 # オブジェクトキーを指定します。
    ))

    # HTTP ステータスコード、リクエスト ID、コンテンツの長さ、ETag、最終更新時刻、最終アクセス時刻、オブジェクトバージョン ID、および CRC64 ハッシュを表示して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content length: {result.content_length},'
          f' etag: {result.etag},'
          f' last modified: {result.last_modified},'
          f' last access time: {result.last_access_time},'
          f' version id: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          )

# スクリプトが直接実行されたときに main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイントを指定します。制御フローはここから開始されます。

既存のオブジェクトのメタデータを変更する

オブジェクトのメタデータを変更するには、CopyObject メソッドを使用します

次のサンプルコードは、CopyObject メソッドを使用してオブジェクトのメタデータを変更します。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成します。
parser = argparse.ArgumentParser(description="copy object sample")

# --region パラメータを指定して、バケットが配置されているリージョンを示します。このパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメータを指定して、コピー先バケットの名前を示します。このパラメータは必須です。
parser.add_argument('--bucket', help='コピー先バケットの名前。', required=True)
# --endpoint パラメータを指定して、バケットが配置されているリージョンのエンドポイントを示します。このパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
# --key パラメータを指定して、コピー先オブジェクトの名前を示します。このパラメータは必須です。
parser.add_argument('--key', help='コピー先オブジェクトの名前。', required=True)
# --source_key を指定して、コピー元オブジェクトの名前を示します。このパラメータは必須です。
parser.add_argument('--source_key', help='コピー元オブジェクトの名前。', required=True)
# --source_bucket パラメータを指定して、コピー元バケットの名前を示します。このパラメータは必須です。
parser.add_argument('--source_bucket', help='コピー元バケットの名前。', required=True)

def main():
    # コマンドラインパラメータを解析します。
    args = parser.parse_args()

    # 認証のために環境変数からアクセス認証情報を取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を読み込み、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # バケットが配置されているリージョンを指定します。
    cfg.region = args.region

    # エンドポイントが提供されている場合は、構成オブジェクトにエンドポイントを指定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 構成を使用して OSSClient インスタンスを作成します。
    client = oss.Client(cfg)

    # コピー元オブジェクトをコピーします。
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,           # コピー先バケットの名前を指定します。
        key=args.key,  # コピー先オブジェクトのキーを指定します。
        source_key=args.source_key,  # コピー元オブジェクトのキーを指定します。
        source_bucket=args.source_bucket,  # コピー元バケットの名前を指定します。
        metadata={'key1': 'value1', 'key2': 'value2'}, # メタデータを指定します。
        metadata_directive='REPLACE', # メタデータディレクティブを指定します。
    ))

    # 操作結果の詳細を表示します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' version id: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          f' source version id: {result.source_version_id},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' last modified: {result.last_modified},'
          f' etag: {result.etag},'
    )

# スクリプトが直接実行されたときに main 関数を呼び出します。
if __name__ == "__main__":
    main() # スクリプトのエントリポイント。スクリプトが直接実行されると、main 関数が呼び出されます。

Copier.Copy を使用してオブジェクトメタデータを変更する

Copier.Copy を使用してコピー元オブジェクトをコピーし、コピー先オブジェクトのメタデータを構成できます。たとえば、既存の元のメタデータをすべて新しいメタデータで上書きしたり、元のメタデータを削除したり、指定されたメタデータヘッダーのみを更新したりできます。コピー操作の完了後にコピー元オブジェクトを削除するかどうかを指定することもできます。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメータパーサーを作成します。
parser = argparse.ArgumentParser(description="copier sample")

# region パラメータを指定して、バケットが配置されているリージョンを示します。このパラメータは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)

# bucket パラメータを指定して、コピー先バケットの名前を示します。このパラメータは必須です。
parser.add_argument('--bucket', help='バケットの名前。', required=True)

# endpoint パラメータを指定して、OSS にアクセスするために使用される OSS エンドポイントを示します。このパラメータはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')

# key パラメータを指定して、コピー先オブジェクトの名前を示します。このパラメータは必須です。
parser.add_argument('--key', help='オブジェクトの名前。', required=True)

# source_key パラメータを指定して、コピー元オブジェクトの名前を示します。このパラメータは必須です。
parser.add_argument('--source_key', help='オブジェクトのコピー元アドレスの名前。', required=True)

# source_bucket パラメータを指定して、コピー元バケットの名前を示します。このパラメータは必須です。
parser.add_argument('--source_bucket', help='バケットのコピー元アドレスの名前。', required=True)


def main():
    # コマンドラインパラメータを解析します。
    args = parser.parse_args()

    # 環境変数からアクセス認証情報を取得します。
    # EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey シークレットを取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト構成を使用します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider  # 認証情報プロバイダーを指定します。
    cfg.region = args.region  # バケットが配置されているリージョンを指定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint  # エンドポイントが提供されている場合は、構成オブジェクトにエンドポイントを指定します。

    # OSSClient インスタンスを作成します。
    client = oss.Client(cfg)

    # copier インスタンスを作成します。
    copier = client.copier()

    # コピー元オブジェクトをコピーします。
    result = copier.copy(
        oss.CopyObjectRequest(
            bucket=args.bucket,          # コピー先バケットの名前。
            key=args.key,                # コピー先オブジェクトの名前。
            source_bucket=args.source_bucket,  # コピー元バケットの名前。
            source_key=args.source_key,  # コピー元オブジェクトのキー。
            metadata={'key1': 'value1', 'key2': 'value2'}, # コピー先オブジェクトのメタデータ。
            metadata_directive="REPLACE",   # メタデータディレクティブを指定します。
        )
    )

    # オブジェクトのコピー結果を表示します。
    # vars() を使用して結果オブジェクトの属性の辞書を返し、辞書を表示します。
    print(vars(result))


if __name__ == "__main__":
    main()