AppendObject 操作を呼び出して、データを追加することでオブジェクトをアップロードします。この操作で作成されたオブジェクトは追加可能オブジェクトであり、PutObject 操作でアップロードされたオブジェクトは標準オブジェクトです。
バージョン管理
バージョン管理が有効または一時停止されているバケット内の追加可能オブジェクトに対して操作を実行する場合は、次の点にご注意ください。
データを追加できるのは、追加可能オブジェクトのカレントバージョンのみです。この操作中、OSS はオブジェクトの旧バージョンを作成しません。
追加可能オブジェクトのカレントバージョンに対して PutObject または DeleteObject 操作を実行すると、OSS はそれを旧バージョンとして保存するため、データを追加できなくなります。
標準オブジェクトや削除マーカーなどの追加可能でないオブジェクトに対して AppendObject 操作を実行することはできません。
新しい追加可能バージョンを作成できるのは、オブジェクトが存在しない場合、またはその最新バージョンが削除マーカーである場合のみです。そのためには、AppendObject 操作を呼び出し、
positionパラメーターを 0 に設定します。
注意事項
AppendObject 操作で作成されるオブジェクトのサイズは 5 GB を超えることはできません。
AppendObject 操作は、バケットレベルの保持ポリシーで保護されているオブジェクトではサポートされていません。
追加可能オブジェクトに対して、KMS を使用したサーバー側暗号化を有効にするために CMK ID を指定することはできません。
追加可能オブジェクトのダウンロードパフォーマンスは、標準オブジェクトやマルチパートアップロードでアップロードされたオブジェクトよりも大幅に低くなります。追加可能オブジェクトを使用する前に、ビジネス要件を評価してください。
バケットでオブジェクトレベルの保持ポリシーが有効になっている場合、AppendObject 操作を使用してオブジェクトをアップロードすることはできません。
権限
デフォルトでは、Alibaba Cloud アカウント (root ユーザー) は完全な権限を持っています。Alibaba Cloud アカウント (root ユーザー) 配下の RAM ユーザーまたは RAM ロールは、デフォルトでは何の権限も持っていません。Alibaba Cloud アカウント (root ユーザー) またはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
|
API |
アクション |
説明 |
|
AppendObject |
|
この操作を呼び出して、既存のオブジェクトにオブジェクトを追加することでオブジェクトをアップロードできます。 |
|
|
既存のオブジェクトにオブジェクトを追加してアップロードする際に、x-oss-tagging を通じてオブジェクトタグを指定する場合、この権限が必要です。 |
リクエスト構文
POST /ObjectName?append&position=Position HTTP/1.1
Content-Length:ContentLength
Content-Type: ContentType
Host: BucketName.oss.aliyuncs.com
Date: GMT Date
Authorization: SignatureValueリクエストヘッダー
パラメーター | タイプ | 必須 | 例 | 説明 |
Cache-control | String | いいえ | no-cache | Web ブラウザーとプロキシによるオブジェクトのキャッシュ方法を指定します。詳細については、RFC2616 をご参照ください。 デフォルト値:none |
Content-Disposition | String | いいえ | attachment;filename=oss_download.jpg | オブジェクトがダウンロードされるときのファイル名を指定します。詳細については、RFC2616 をご参照ください。 デフォルト値:none |
Content-MD5 | String | いいえ | ohhnqLBJFiKkPSBO1eNaUA== | Content-MD5 ヘッダーは、MD5 アルゴリズムを使用して生成される値です。このヘッダーは、メッセージ本文の整合性をチェックするために使用されます。 Content-MD5 値を取得するには、ヘッダーを含まないメッセージ本文に対して MD5 アルゴリズムを実行して 128 ビットの数値を取得し、その数値を Base64 エンコードします。 デフォルト値:none 制約:none |
Expires | String | いいえ | Wed, 08 Jul 2015 16:57:01 GMT | 有効期限。詳細については、RFC2616 をご参照ください。 デフォルト値:none |
x-oss-server-side-encryption | String | いいえ | AES256 | サーバー側暗号化方式を指定します。 有効な値:
|
x-oss-object-acl | String | いいえ | private | オブジェクトのアクセス権限を指定します。 有効な値:
アクセス権限の詳細については、「オブジェクト ACL」をご参照ください。 |
x-oss-storage-class | String | いいえ | Standard | オブジェクトのストレージクラスを指定します。 オブジェクトのアップロード時にこのヘッダーを指定すると、バケットのデフォルトのストレージクラスに関係なく、オブジェクトは指定されたストレージクラスに格納されます。たとえば、低頻度アクセス (IA) バケットにオブジェクトをアップロードする際に x-oss-storage-class を Standard に設定すると、オブジェクトは標準ストレージクラスに格納されます。 有効な値:
ストレージクラスの詳細については、「ストレージクラス」をご参照ください。 重要
|
x-oss-meta-* | String | いいえ | x-oss-meta-location | このヘッダーは、追加可能オブジェクトを作成するときにのみ追加でき、後続の追加リクエストでは追加できません。x-oss-meta-* プレフィックスを持つヘッダーは、オブジェクトメタデータと見なされます。 すべてのオブジェクトメタデータの合計サイズは 8 KB を超えることはできません。 メタデータの命名規則:ユーザー定義のメタデータ名には、ハイフン (-)、数字、文字を含めることができます。大文字は小文字に変換されます。アンダースコア (_) などの他の文字はサポートされていません。 |
x-oss-tagging | String | いいえ | TagA=A | オブジェクトのタグをキーと値の形式で指定します。一度に複数のタグを指定できます。例: 重要
|
この操作の共通リクエストヘッダーの詳細については、「共通リクエストヘッダー」をご参照ください。
リクエストパラメーター
append および position パラメーターは CanonicalizedResource の一部であり、署名に含める必要があります。
パラメーター | タイプ | 必須 | 例 | 説明 |
append | String | はい | 該当なし | これが AppendObject 操作であることを指定します。各 AppendObject 操作は、オブジェクトの最終更新日時を更新します。 |
position | String | はい | 0 | データの追加を開始する位置を指定します。各操作が成功した後、x-oss-next-append-position レスポンスヘッダーは、次の追加操作の位置を示します。 最初の追加操作の位置は 0 である必要があります。後続の追加操作の位置は、オブジェクトの現在のサイズです。たとえば、最初の AppendObject リクエストの position の値が 0 で、content-length が 65536 の場合、2 番目の AppendObject リクエストの position の値は 65536 である必要があります。
|
レスポンスヘッダー
レスポンスヘッダー | タイプ | 例 | 説明 |
x-oss-next-append-position | 64 ビット整数 | 1717 | 次の追加操作の位置。これはオブジェクトの現在のサイズです。 このヘッダーは、AppendObject 操作が成功した場合、または position がオブジェクトサイズと一致しないために 409 エラーが発生した場合に返されます。 |
x-oss-hash-crc64ecma | 64 ビット整数 | 3231342946509354535 | ECMA-182 標準に基づいて計算された、オブジェクトの 64 ビット巡回冗長検査 (CRC) 値を示します。 |
この操作の共通レスポンスヘッダーの詳細については、「共通レスポンスヘッダー」をご参照ください。
CRC-64 の計算方法
次の方法を使用して CRC-64 値を計算できます。
Boost CRC モジュールの使用
typedef boost::crc_optimal<64, 0x42F0E1EBA9EA3693ULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, true, true> boost_ecma; uint64_t do_boost_crc(const char* buffer, int length) { boost_ecma crc; crc.process_bytes(buffer, length); return crc.checksum(); }Python crcmod の使用
import crcmod do_crc64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693, initCrc=0, xorOut=0xffffffffffffffff, rev=True) print(do_crc64(b"123456789"))
他の操作との関係
他の操作 | 説明 |
既存の追加可能オブジェクトに対して PutObject を使用すると、オブジェクトが上書きされ、そのタイプが標準に変換されます。 | |
追加可能オブジェクトに対する HeadObject 操作は、x-oss-next-append-position、x-oss-hash-crc64ecma、および x-oss-object-type ヘッダーを返します。追加可能オブジェクトの x-oss-object-type の値は Appendable です。 | |
GetBucket リクエストへのレスポンスでは、追加可能オブジェクトの Type の値は Appendable に設定されます。 |
例
リクエスト例
POST /oss.jpg?append&position=0 HTTP/1.1 Host: oss-example.oss.aliyuncs.com Cache-control: no-cache Expires: Wed, 08 Jul 2015 16:57:01 GMT x-oss-storage-class: Archive Content-Disposition: attachment;filename=oss_download.jpg Date: Wed, 08 Jul 2015 06:57:01 GMT Content-Type: image/jpg Content-Length: 1717 Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-disposition;content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e [1717 bytes of object data]レスポンス例
HTTP/1.1 200 OK Date: Wed, 08 Jul 2015 06:57:01 GMT ETag: "0F7230CAA4BE94CCBDC99C550000****" Connection: keep-alive Content-Length: 0 Server: AliyunOSS x-oss-hash-crc64ecma: 14741617095266562575 x-oss-next-append-position: 1717 x-oss-request-id: 559CC9BDC755F95A6448****バージョン管理リクエストの例
バケットでバージョン管理が有効になっている場合、AppendObject リクエストへのレスポンスには x-oss-version-id ヘッダーが含まれます。このヘッダーの値は、オブジェクトのカレントバージョンのバージョン ID です。
POST /example?append&position=0 HTTP/1.1 Host: versioning-append.oss.aliyuncs.com Date: Tue, 09 Apr 2019 03:59:33 GMT Content-Length: 3 Content-Type: application/octet-stream Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,AdditionalHeaders=content-length,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218eレスポンス例
HTTP/1.1 200 OK Date: Tue, 09 Apr 2019 03:59:33 GMT ETag: "2776271A4A09D82CA518AC5C0000****" Connection: keep-alive Content-Length: 0 Server: AliyunOSS x-oss-version-id: CAEQGhiBgIC_k6aV5RgiIGI3YTY2ZmMzYWJlMzQ3YjM4YTljOTk5YjUyZGF**** x-oss-hash-crc64ecma: 3231342946509354535 x-oss-next-append-position: 47 x-oss-request-id: 5CAC18A5B7AEADE01700****
SDK
この操作は、次の言語の SDK で利用できます。
CLI (ossutil)
ossutil を使用してこの操作を実行するには、「append-object」コマンドをご参照ください。
エラーコード
エラーコード | HTTP ステータスコード | 説明 |
ObjectNotAppendable | 409 | 追加可能でないオブジェクトに追加しようとしました。 |
PositionNotEqualToLength | 409 |
|
InvalidArgument | 400 | x-oss-storage-class や x-oss-object-acl などのパラメーターに指定された値が無効です。 |
FileImmutable | 409 | 保持ポリシーで保護されているバケット内のデータを変更しようとすると、このエラーが返されます。 |
KmsServiceNotEnabled | 403 | KMS 暗号化アルゴリズムを使用しようとしたときに、Key Management Service (KMS) が有効になっていない場合にこのエラーが発生します。 |