追加アップロードは、AppendObject メソッドを使用して、既存の追加可能オブジェクトにコンテンツを追加します。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、『リージョンとエンドポイント』をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、『初期化』をご参照ください。
ファイルが存在しない場合、AppendObject 操作を呼び出すと、追加可能オブジェクトが作成されます。
ファイルが存在する場合:
ファイルが追加可能オブジェクトであり、指定された追加位置がファイルの現在の長さと一致する場合、コンテンツはファイルの末尾に追加されます。
ファイルが追加可能オブジェクトであっても、指定された追加位置がファイルの現在の長さと一致しない場合、PositionNotEqualToLength 例外がスローされます。
ファイルが追加可能オブジェクトでない場合 (シンプルアップロードでアップロードされた通常オブジェクトなど)、ObjectNotAppendable 例外がスローされます。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウントに属する RAM ユーザーまたは RAM ロールは、デフォルトでは何の権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
API | アクション | 説明 |
AppendObject |
| この操作を呼び出して、既存のオブジェクトにオブジェクトを追加することで、オブジェクトをアップロードできます。 |
| 既存のオブジェクトにオブジェクトを追加してアップロードする際に、x-oss-tagging を通じてオブジェクトタグを指定する場合、この権限が必要です。 |
例
次のコードは、オブジェクトにコンテンツを追加する方法の例を示しています。
# -*- 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。このパラメーターは、署名バージョン 4 を使用する場合に必要です。
region = "cn-hangzhou"
# ご利用のバケット名を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# 次のコードは、追加アップロードのヘッダーを指定する方法の例を示しています。
# headers = dict()
# オブジェクトの Web ページのキャッシュ動作を指定します。
# headers['Cache-Control'] = 'no-cache'
# オブジェクトのダウンロード時のファイル名を指定します。
# headers['Content-Disposition'] = 'oss_MultipartUpload.txt'
# このリクエストヘッダーは、メッセージの内容が送信された内容と同じであるかどうかを確認するために使用されます。
# headers['Content-MD5'] = 'ohhnqLBJFiKkPSBO1eNaUA=='
# 有効期限を指定します。
# headers['Expires'] = 'Wed, 08 Jul 2022 16:57:01 GMT'
# オブジェクトのアクセス制御リスト (ACL) を指定します。この例では、ACL は非公開のアクセス権限を指定する OBJECT_ACL_PRIVATE に設定されています。
# headers['x-oss-object-acl'] = oss2.OBJECT_ACL_PRIVATE
# 追加アップロード中に同名のオブジェクトを上書きするかどうかを指定します。
# headers['x-oss-forbid-overwrite'] = 'true'
# サーバー側暗号化方式を指定します。この例では、OSS マネージドキー (SSE-OSS) によるサーバー側暗号化を使用します。
# headers[OSS_SERVER_SIDE_ENCRYPTION] = SERVER_SIDE_ENCRYPTION_AES256
# オブジェクトのストレージクラスを指定します。
# headers['x-oss-storage-class'] = oss2.BUCKET_STORAGE_CLASS_STANDARD
# AppendObject 操作を呼び出して追加可能オブジェクトを作成するときに、x-oss-meta- プレフィックスを持つパラメーターを追加します。既存の追加可能オブジェクトにコンテンツを追加するリクエストには、これらのパラメーターを含めないでください。x-oss-meta- プレフィックスを持つパラメーターは、オブジェクトメタデータと見なされます。
# headers['x-oss-meta-author'] = 'Alice'
# result = bucket.append_object(exampledir/exampleobject.txt, 0, 'content of first append', headers=headers)
# 最初の追加操作を開始する位置 (Position パラメーター) を 0 に設定します。
# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:exampledir/exampleobject.txt。
result = bucket.append_object('exampledir/exampleobject.txt', 0, 'content of first append')
# これが最初の追加操作でない場合は、前回の追加操作の戻り値に含まれる next_position 属性から、または bucket.head_object メソッドを呼び出すことによって、次の追加開始位置を取得します。
bucket.append_object('<yourObjectName>', result.next_position, 'content of second append') 関連ドキュメント
追加アップロードの完全なサンプルコードについては、GitHub の例をご参照ください。
AppendObject API 操作の詳細については、『AppendObject』をご参照ください。