このトピックでは、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()