edit-icon download-icon

オブジェクトの管理

最終更新日: Aug 03, 2018

Python SDK を使用すると、オブジェクトの一覧表示、削除とコピー、オブジェクト情報の表示、およびオブジェクトメタデータの変更ができます。

リストオブジェクト

Python SDK には、オブジェクトのリストとマルチパートアップロードを実行する一連のイテレータが用意されています。

シンプルリスト

次のコードは、バケット内の 10 個のファイルをリストしています。

  1. # -*- coding: utf-8 -*-
  2. import oss2
  3. from itertools import islice
  4. auth = oss2.Auth ('Your AccessKeyID', 'Your AccessKeySecret')
  5. bucket = oss2.Bucket (auth, 'Your endpoint', 'your bucket name')
  6. for b in islice(oss2.ObjectIterator(bucket), 10):
  7. print(b.key)

接頭辞でオブジェクトを一覧表示する

次のコードでは、接頭辞が「img-」のすべてのオブジェクトのみがリストされています。

  1. for obj in oss2.ObjectIterator(bucket, prefix='img-'):
  2. print(obj.key)

フォルダをシミュレートする

OSS にはフォルダやディレクトリがないため、OSS 上のバケットはフラットな構造になっています。オブジェクト名に「/」を追加して、フォルダを刺激することができます。オブジェクトをリストするときは、 ‘delimiter’パラメータ(ディレクトリ区切り文字)を「/」に設定し、OSS は、それがフォルダであるかどうかを “CommonPrefix”であるかどうかによって判別します。詳細は、オブジェクトの一覧表示 を参照してください。

次のコードは、「ルートディレクトリ」の下にあるすべてのコンテンツをリストしています。

  1. for obj in oss2.ObjectIterator(bucket, delimiter='/'):
  2. if obj.is_prefix(): # Folder
  3. print('directory: ' + obj.key)
  4. else: # Object
  5. print('file: ' + obj.key)

注意フォルダリストの取得は効率が悪く、お勧めできません。

オブジェクトが存在するかどうかを識別する

‘object_exists’を使用して、オブジェクトが存在するかどうかを判断できます。戻り値が ‘true’の場合、オブジェクトが存在することを示します。戻り値が’false’の場合、オブジェクトが存在しないことを示します。

  1. exist = bucket.object_exists('remote.txt')
  2. if exist:
  3. print('object exist')
  4. else:
  5. print('object not eixst')

オブジェクトを削除する

次のコードは、単一のオブジェクトを削除します。

  1. bucket.delete_object('remote.txt')

複数のオブジェクト(最大 1,000 個のオブジェクト)を削除できます。次のコードは、3 つのオブジェクトを削除し、正常に削除されたオブジェクトの名前を出力します。

  1. result = bucket.batch_delete_objects(['a.txt', 'b.txt', 'c.txt'])
  2. print('\n'.join(result.deleted_keys))

オブジェクトをコピーする

次のコードは、src-bucket というバケットの source.txt の内容を現在のバケットの target.txt オブジェクトにコピーします。

  1. bucket.copy_object('src-bucket', 'source.txt', 'target.txt')

ラージオブジェクトをコピーする

オブジェクトが大きい場合は、オブジェクトサイズが大きいためにタイムアウトを避けるために、マルチパートコピーをお勧めします。マルチパートアップロードと同様に、マルチパートコピーは 3 つのステップで完了します:

  1. 初期化(Bucket.init_multipart_upload):アップロード ID を取得する
  2. 部品をコピーする(Bucket.upload_part_copy):ソースオブジェクトの各部分がターゲットオブジェクトの一部としてコピーされる
  3. マルチパートコピーの完了(Bucket.complete_multipart_copy):マルチパートコピーが完了してターゲットオブジェクトを生成する

以下に例を示します。

  1. from oss2.models import PartInfo
  2. from oss2 import determine_part_size
  3. src_key = 'remote.txt'
  4. dst_key = 'remote-dst.txt'
  5. bucket.put_object(src_key, 'a' * (1024 * 1024 + 100))
  6. total_size = bucket.head_object(src_key).content_length
  7. part_size = determine_part_size(total_size, preferred_size=100 * 1024)
  8. # Part initialization
  9. upload_id = bucket.init_multipart_upload(dst_key).upload_id
  10. parts = []
  11. # Copy parts one by one
  12. part_number = 1
  13. offset = 0
  14. while offset < total_size:
  15. num_to_upload = min(part_size, total_size - offset)
  16. byte_range = (offset, offset + num_to_upload - 1)
  17. result = bucket.upload_part_copy(bucket.bucket_name, src_key, byte_range,
  18. dst_key, upload_id, part_number)
  19. parts.append(PartInfo(part_number, result.etag))
  20. offset += num_to_upload
  21. part_number += 1
  22. # Complete multipart upload
  23. bucket.complete_multipart_upload(dst_key, upload_id, parts)

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

次のコードは、カスタムオブジェクトのメタデータを変更します。

  1. bucket.update_object_meta('story.txt', {'x-oss-meta-author': 'O. Henry'})
  2. bucket.update_object_meta('story.txt', {'x-oss-meta-price': '100 dollar'})

カスタムオブジェクトメタデータの以前の値(「x-oss-meta-」が付いた HTTP ヘッダー)は、カスタムオブジェクトのメタデータが呼び出されるたびに上書きされます。

上記の例では、カスタムオブジェクトメタデータ「x-oss-meta-author」は、2 回目の呼び出しで削除されます。

Content-Type などのその他の情報も変更できます。

  1. bucket.update_object_meta('story.txt', {'Content-Type': 'text/plain'})

この呼び出しが Content-Type を変更しただけでなく、以前のカスタムオブジェクトのメタデータもクリアしたことに注意してください。

オブジェクトアクセス許可を表示する

  1. print(bucket.get_object_acl('story.txt').acl)

注意:
このオブジェクトには、デフォルト(デフォルト値)、プライベート(private-read-write)、パブリック・リード(public-read と private-write)、パブリック・リード・ライト(public-read-write)の 4 つのアクセス ACL があります。より詳細な説明は RAM にあります。

オブジェクトアクセス権を設定する

オブジェクトのアクセス許可を public-read に設定します。

  1. bucket.put_object_acl('story.txt', oss2.OBJECT_ACL_PUBLIC_READ)

注意:このオブジェクトには、デフォルト(デフォルト値)、プライベート(private-read-write)、パブリック・リード(パブpublic-readとprivate-write)、パブリック・リード・ライト(public-read-write)の 4 つのアクセス ACL があります。それらは、それぞれ oss2.OBJECT_ACL_DEFAULT、oss2.OBJECT_ACL_PRIVATE、oss2.OBJECT_ACL_PUBLIC_READ および oss2.OBJECT_ACL_PUBLIC_READ_WRITE にマップされます。