Object Storage Service (OSS) は、従来のファイルシステムで使用されている階層構造ではなく、フラット構造を使用してオブジェクトを格納します。 OSS のすべてのデータは、バケット内のオブジェクトとして格納されます。 オブジェクト管理を容易にするため、OSS コンソールには、名前がスラッシュ (/) で終わるオブジェクトがディレクトリとして表示されます。 ディレクトリは、ファイルシステムのフォルダに似ています。 ディレクトリを使用すると、オブジェクトを階層的に整理およびグループ化し、アクセスの制御を容易にすることができます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントが使用されています。 OSS と同じリージョン内の他の Alibaba Cloud サービスを使用して OSS にアクセスする場合は、内部エンドポイントを使用します。 リージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報を設定する方法の詳細については、「アクセス認証情報を設定する」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスが作成されます。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
ディレクトリの作成
ディレクトリを作成するためのサンプルコードを以下に示します。
# -*- 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"
# エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。署名アルゴリズム V4 を使用する場合は、このパラメータが必要です。
region = "cn-hangzhou"
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# ディレクトリの名前を指定します。ディレクトリ名はスラッシュで終わる必要があります。
bucket.put_object('exampledir/', '')
ディレクトリのリスト
ルートディレクトリ内のすべてのサブディレクトリを取得するためのサンプルコードを以下に示します。
# -*- 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"
# エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。署名アルゴリズム V4 を使用する場合は、このパラメータが必要です。
region = "cn-hangzhou"
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# ディレクトリをリストします
def list_directories(bucket, prefix='', delimiter='/'):
result = bucket.list_objects_v2(prefix=prefix, delimiter=delimiter)
directories = []
# 現在のレベルのディレクトリを取得します。
for common_prefix in result.prefix_list:
directories.append(common_prefix)
return directories
# 関数を呼び出して、ルートディレクトリ内のすべてのサブディレクトリを取得します。
directories = list_directories(bucket)
print("Directory list:", directories)
ディレクトリの削除
ディレクトリを削除すると、サブディレクトリとディレクトリ内のすべてのオブジェクトが同期的に削除されます。ディレクトリを削除する際は注意してください。
examplebucket から log という名前のディレクトリとその中に格納されているすべてのオブジェクトを削除するためのサンプルコードを以下に示します。
# -*- 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"
# エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。署名アルゴリズム V4 を使用する場合は、このパラメータが必要です。
region = "cn-hangzhou"
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
prefix = "exampledir/"
# ディレクトリとそれに格納されているすべてのオブジェクトを削除します。
for obj in oss2.ObjectIterator(bucket, prefix=prefix):
bucket.delete_object(obj.key)
関連トピック
ディレクトリの作成
ディレクトリの作成を呼び出すことができる API 操作の詳細については、「PutObject」をご参照ください。
ディレクトリの削除
ディレクトリとそれに格納されているすべてのオブジェクトを削除するための完全なサンプルコードについては、GitHub をご覧ください。
ディレクトリとそれに格納されているすべてのオブジェクトを削除するために呼び出すことができる API 操作の詳細については、「DeleteObject」をご参照ください。