AppendObject操作を呼び出して、既存の追加可能オブジェクトにコンテンツを追加できます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
追加アップロードを使用するには、
oss:PutObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。コンテンツを追加するオブジェクトが存在しない場合、AppendObject操作を呼び出すと追加可能なオブジェクトが作成されます。
コンテンツを追加するオブジェクトが存在する場合:
オブジェクトが追加可能なオブジェクトであり、追加操作が開始される指定された位置が現在のオブジェクトサイズに等しい場合、データはオブジェクトの最後に追加されます。
オブジェクトが追加可能オブジェクトであり、追加操作の開始位置が現在のオブジェクトサイズと等しくない場合、PositionNotEqualToLengthエラーが返されます。
オブジェクトが追加可能オブジェクトでない場合、ObjectNotAppendableエラーが返されます。
例
次のサンプルコードは、追加アップロード操作を実行する方法の例を示しています。
# -*-コーディング: utf-8 -*-
oss2のインポート
# Alibaba CloudアカウントのAccessKeyペアには、すべてのAPI操作に対する権限があります。 これらの資格情報を使用してOSSで操作を実行することは、リスクの高い操作です。 RAMユーザーを使用してAPI操作を呼び出したり、ルーチンのO&Mを実行することを推奨します。RAMユーザーを作成するには、RAMコンソールにログインします。
auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
# この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
# バケットの名前を指定します。 例: examplebucket.
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
# 次のコードは、追加アップロードのヘッダーを指定する方法の例を示しています。# headers = dict()
# オブジェクトのwebページのキャッシュ動作を指定します。
# headers['Cache-Control '] = 'no-cache'
# オブジェクトのダウンロード時にオブジェクトの名前を指定します。
# headers['Content-Disposition'] = 'oss_MultipartUpload.txt'
# オブジェクトのコンテンツのエンコード形式を指定します。
# headers['Content-Encoding'] = 'utf-8'
# 受信したメッセージの内容と送信したメッセージの内容が同じかどうかを確認するためのリクエストヘッダーを指定します。
# 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'
# サーバー側の暗号化方法を指定します。 この例では、SSE-OSSはサーバー側の暗号化に指定されています。
# headers[OSS_SERVER_SIDE_ENCRYPTION] = SERVER_SIDE_ENCRYPTION_AES256
# オブジェクトのストレージクラスを指定します。
# headers['x-oss-storage-classs'] = 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)
# 最初の追加操作の開始位置を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をご参照ください。
追加アップロードを実行するために呼び出すことができるAPI操作の詳細については、「AppendObject」をご参照ください。