AppendObject は、追加モードでファイルをアップロードするために使用されます。
オブジェクトの追加操作で作成されたオブジェクトのタイプはAppendable Object で、オブジェクトの Put 操作でアップロードされたオブジェクトのタイプは Normal Object です。
リクエスト構文
POST /ObjectName? append&position=Position HTTP/1.1Content-Length:ContentLengthContent-Type: ContentTypeHost: BucketName.oss.aliyuncs.comDate: GMT DateAuthorization: SignatureValue
リクエストヘッダー
名前 | 型 | 説明 | |||
---|---|---|---|---|---|
Cache-Control | String | オブジェクトがダウンロードされたときの Web ページのキャッシュアクションを指定します。 詳細は、 RFC2616 を参照してください。 デフォルト:なし | |||
Content-Disposition | String | ダウンロードしたオブジェクトの名前を指定します。 詳細は、 RFC2616 を参照してください。 デフォルト:なし | |||
Content-Encoding | String | オブジェクトをダウンロードするときのコンテンツのエンコーディング形式を指定します。 詳細は、 RFC2616 を参照してください。 デフォルト:なし | |||
Content-MD5 | String | RFC 1864 で定義されているように、メッセージの内容(ヘッダーを除く)は、128 ビットの数値である MD5 値を取得するために計算されます。 次に、この番号は Content-MD5 値に Base64 エンコードされます。 このリクエストヘッダーは、メッセージの有効性、つまりメッセージの内容が送信された内容と一致するかどうかをチェックするために使用できます。 このリクエストヘッダーはオプションですが、エンドツーエンドチェックにこのリクエストヘッダーを使用することをお勧めします。 デフォルト:なし 制限事項:なし | |||
Expires | Integer | 有効期限を示します。 詳細は、 RFC2616 を参照してください。 デフォルト:なし | |||
x-oss-server-side-encryption | String | OSS がオブジェクトを作成するときのサーバー側の暗号化アルゴリズムを指定します。 有効な値: AES256 または KMS
| |||
x-oss-object-acl | String | OSS がオブジェクトを作成するときのアクセス許可を指定します。 有効な値: public-read,private,public-read-write |
レスポンスヘッダー
名前 | 型 | 説明 |
---|---|---|
x-oss-next-append-position | 64-bit integer | 次の要求で提供する必要がある位置を指定します。 実際のオブジェクトの長さです。 このヘッダーは、AppendObject に対して正常なメッセージが返されたとき、または位置の不一致とオブジェクトの長さのために 409 エラーが発生したときに格納されます。 |
x-oss-hash-crc64ecma | 64-bit integer | オブジェクトの 64 ビット CRC 値を指定します。 64 ビット CRC 値は、 ECMA-182 Standard。 |
他の操作との関連付け
- AppendObject は、追加不可能なオブジェクトには適用されません。 たとえば、同じ名前の通常のオブジェクトがすでに存在し、オブジェクトの追加操作が実行されている場合、システムは 409 メッセージとエラーコード ObjectNotAppendable を返します。
- 既存の追加可能なオブジェクトに PutObject 操作を実行すると、この追加可能なオブジェクトは新しいオブジェクトによって上書きされ、このオブジェクトのタイプは Normal Object に変更されます。
- Head Object 操作が実行された後、システムはオブジェクトのタイプを示す x-oss-object-type を返します。 オブジェクトが追加可能オブジェクトである場合、x-oss-object-type の値は Appendable です。 追加可能オブジェクトの場合、Head Object 操作が実行された後、x-oss-next-append-position と x-oss-hash-crc64ecma も返されます。
- GetBucket (List Objects)リクエストのレスポンス XML では、追加可能オブジェクトのタイプが Appendable に設定されます。
- コピーオブジェクトを使用して追加可能なオブジェクトをコピーすることも、このオブジェクトのサーバー側の暗号化属性を変更することもできません。 オブジェクトのコピーを使用してカスタムメタデータを変更することができます。
詳細分析
- append と position という 2 つの URL パラメータは両方とも CanonicalizedResource であり、署名に含める必要があります。
- URL パラメータには、操作が AppendObject 操作であることを指定する append も含める必要があります。
- URL クエリパラメータには position が含まれている必要があります。このパラメータは、追加が開始される位置を指定します。 最初の AppendObject オペレーションの position の値は 0 でなければならず、次のオペレーションの position の値は現在のオブジェクトの長さになります。 たとえば、最初の AppendObject リクエストで指定された position の値が 0 で、content-length の値が 65536 の場合、2 番目の AppendObject リクエストで指定された position の値を 65536 に設定する必要があります。 応答ヘッダー内の x-oss-next-append-position は、次の付録オブジェクト要求の位置も指定します。
- 位置値が現在のオブジェクト長と異なる場合、OSS は 409 メッセージとエラーコード PositionNotEqualToLength を返します。 このようなエラーが発生した場合は、レスポンスヘッダーの x-oss-next-append-position から次の AppendObject 要求の位置を取得し、AppendObject 要求を再度送信できます。
- 位置の値が 0 で、同じ名前の追加可能なオブジェクトが存在しない場合、または同じ名前の追加可能なオブジェクトの長さが 0 の場合、オブジェクトの追加操作は成功します。 そうでなければ、システムは、位置とオブジェクトの長さが不一致であるとみなします。
- 位置の値が 0 で、同じ名前のオブジェクトが存在しない場合は、PutObject リクエストのように AppendObject リクエストでヘッダー(x-oss-server-side-encryption など)を設定できます。 これは、マルチパートアップロードを開始する場合と同じです。 位置の値が 0 で、正しい x-oss-server-side-encryption ヘッダーが要求に追加された場合、後続の AppendObject 要求へのレスポンスのヘッダーには、x-oss-server-side-encryption も含まれます。 暗号化アルゴリズムを示します。 後でメタを変更する必要がある場合は、オブジェクトのコピー要求を使用できます。
- 並行性のために、position の値を x-oss-next-append-position に設定しても、PositionNotEqualToLength のためにこの要求は失敗することがあります。
- AppendObject によって生成されるオブジェクトの長さの制限は、PutObject によって生成されるオブジェクトの長さの制限と同じです。
- 各オブジェクトの追加操作の後、このオブジェクトの最終変更時刻が更新されます。
- 位置の値が正しく、長さが 0 のコンテンツが既存の追加可能オブジェクトに追加された場合、この操作ではオブジェクトのステータスは変更されません。
CRC64 計算方法
追加可能なオブジェクトの CRC 値は、 ECMA-182 Standard。 その計算方法は XZ の計算方法と同じです。 CRC64 は、ブースト 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();
あるいは、CRC64 は Python crcmod を使用して次のように計算することができます。
do_crc64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693L, initCrc=0L, xorOut=0xffffffffffffffffL, rev=True)print do_crc64(“123456789”)
例
リクエスト例:
POST /oss.jpg? append&position=0 HTTP/1.1Host: oss-example.oss.aliyuncs.comCache-control: no-cacheExpires: Wed, 08 Jul 2015 16:57:01 GMTContent-Encoding: utf-8Content-Disposition: attachment;filename=oss_download.jpgDate: Wed, 08 Jul 2015 06:57:01 GMTContent-Type: image/jpgContent-Length: 1717Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:kZoYNv66bsmc10+dcGKw5x2PRrk=[1717 bytes of object data]
リターン例:
HTTP/1.1 200 OKDate: Wed, 08 Jul 2015 06:57:01 GMTETag: “0F7230CAA4BE94CCBDC99C5500000000”Connection: keep-aliveContent-Length: 0Server: AliyunOSSx-oss-hash-crc64ecma: 14741617095266562575x-oss-next-append-position: 1717x-oss-request-id: 559CC9BDC755F95A64485981