Anda dapat memanggil operasi AppendObject untuk mengunggah objek dengan menambahkan data. Objek yang dibuat menggunakan operasi AppendObject merupakan objek Appendable, sedangkan objek yang diunggah melalui operasi PutObject adalah objek Normal.
Pengendalian versi
Saat melakukan operasi pada objek Appendable dalam bucket yang memiliki pengendalian versi aktif atau ditangguhkan, perhatikan hal-hal berikut:
Anda hanya dapat menambahkan data ke versi terkini suatu objek jika objek tersebut merupakan objek Appendable. OSS tidak membuat versi sebelumnya untuk objek Appendable ini.
Jika Anda melakukan operasi PutObject atau DeleteObject pada versi terkini objek Appendable, OSS akan menyimpan objek tersebut sebagai versi sebelumnya. Namun, Anda tidak dapat lagi menambahkan data ke objek tersebut.
Anda tidak dapat melakukan operasi AppendObject pada objek non-Appendable, seperti objek Normal atau penanda hapus (delete markers).
Anda hanya dapat membuat versi Appendable baru jika objek tersebut belum ada atau versi terbarunya adalah penanda hapus. Untuk melakukannya, panggil AppendObject dan atur parameter
positionke 0.
Batasan
Ukuran akhir objek yang dibuat menggunakan AppendObject tidak boleh melebihi 5 GB.
Anda tidak dapat menggunakan operasi AppendObject pada objek yang dilindungi oleh kebijakan retensi.
Anda tidak dapat menentukan ID CMK untuk mengaktifkan enkripsi sisi server dengan Key Management Service (KMS) pada objek Appendable.
Kinerja pengunduhan objek Appendable jauh lebih rendah dibandingkan objek Normal atau Multipart. Pertimbangkan hal ini sesuai dengan skenario bisnis Anda.
Izin
Secara default, Akun Alibaba Cloud memiliki izin penuh. Pengguna RAM atau Peran RAM di bawah Akun Alibaba Cloud tidak memiliki izin apa pun secara default. Akun Alibaba Cloud atau administrator akun harus memberikan izin operasi melalui RAM Policy atau Bucket policies.
API | Action | Definisi |
AppendObject |
| Anda dapat memanggil operasi ini untuk mengunggah objek dengan menambahkan objek ke objek yang sudah ada. |
| Saat mengunggah objek dengan menambahkannya ke objek yang sudah ada, jika Anda menentukan tag objek melalui x-oss-tagging, izin ini diperlukan. |
Sintaks permintaan
POST /ObjectName?append&position=Position HTTP/1.1
Content-Length: ContentLength
Content-Type: ContentType
Host: BucketName.oss.aliyuncs.com
Date: GMT Date
Authorization: SignatureValueHeader permintaan
Nama | Tipe | Wajib | Contoh | Deskripsi |
Cache-control | string | Tidak | no-cache | Menentukan perilaku caching halaman web untuk objek. Untuk informasi selengkapnya, lihat RFC2616. Default: none |
Content-Disposition | string | Tidak | attachment;filename=oss_download.jpg | Menentukan nama objek saat diunduh. Untuk informasi selengkapnya, lihat RFC2616. Default: none |
Content-MD5 | string | Tidak | ohhnqLBJFiKkPSBO1eNaUA== | Header Content-MD5 adalah nilai yang dihasilkan oleh algoritma MD5. Header ini digunakan untuk memeriksa apakah konten pesan sama dengan konten yang dikirim. Untuk mendapatkan nilai Content-MD5, jalankan algoritma MD5 pada isi pesan (tidak termasuk header) untuk mendapatkan angka 128-bit, lalu encode angka tersebut dalam Base64. Default: none Batasan: none |
Expires | string | Tidak | Wed, 08 Jul 2015 16:57:01 GMT | Waktu kedaluwarsa. Untuk informasi selengkapnya, lihat RFC2616. Default: none |
x-oss-server-side-encryption | string | Tidak | AES256 | Menentukan metode enkripsi sisi server. Nilai yang valid:
|
x-oss-object-acl | string | Tidak | private | Menentukan izin akses objek. Nilai yang valid:
Untuk informasi selengkapnya tentang izin akses, lihat Object ACL. |
x-oss-storage-class | string | Tidak | Standard | Menentukan kelas penyimpanan objek. Untuk bucket dengan kelas penyimpanan apa pun, jika Anda menentukan parameter ini saat mengunggah objek, objek yang diunggah akan disimpan dalam kelas penyimpanan yang ditentukan. Misalnya, jika Anda mengatur x-oss-storage-class ke Standard saat mengunggah objek ke bucket Infrequent Access, objek tersebut akan disimpan sebagai Standard. Nilai yang valid:
Untuk informasi selengkapnya tentang kelas penyimpanan, lihat Kelas penyimpanan. Penting
|
x-oss-meta-* | string | Tidak | x-oss-meta-location | Anda dapat menambahkan x-oss-meta-* saat membuat objek Appendable. Anda tidak dapat menyertakan parameter ini dalam operasi append berikutnya. Jika Anda mengonfigurasi parameter yang diawali dengan awalan x-oss-meta-*, parameter tersebut dianggap sebagai metadata. Batas ukuran metadata: Suatu objek dapat memiliki beberapa catatan metadata, tetapi ukuran total semua metadata tidak boleh melebihi 8 KB. Konvensi penamaan metadata: Nama metadata dapat berisi tanda hubung (-), angka, dan huruf kecil (a-z). Huruf kapital akan dikonversi menjadi huruf kecil. Karakter lain, termasuk garis bawah (_), tidak didukung. |
x-oss-tagging | string | Tidak | TagA=A | Menentukan tag objek dalam format pasangan kunci-nilai. Anda dapat menentukan beberapa tag sekaligus, misalnya Penting
|
Untuk informasi selengkapnya tentang header permintaan umum lainnya untuk operasi ini, lihat Header permintaan umum.
Parameter permintaan
Parameter append dan position merupakan bagian dari CanonicalizedResource dan harus disertakan dalam signature.
Nama | Tipe | Wajib | Contoh | Deskripsi |
append | string | Ya | Tidak berlaku | Menentukan operasi AppendObject. Setiap operasi AppendObject memperbarui waktu modifikasi terakhir objek. |
position | string | Ya | 0 | Menentukan posisi mulai penambahan data. Setelah setiap operasi berhasil, header respons x-oss-next-append-position menunjukkan posisi untuk append berikutnya. Posisi untuk operasi append pertama harus 0. Posisi untuk operasi append berikutnya adalah ukuran objek saat ini. Misalnya, jika posisi untuk permintaan AppendObject pertama adalah 0 dan content-length-nya 65536, maka posisi untuk permintaan AppendObject kedua harus 65536.
|
Header respons
Header respons | Tipe | Contoh | Deskripsi |
x-oss-next-append-position | integer 64-bit | 1717 | Posisi untuk permintaan berikutnya, yaitu ukuran objek saat ini. Header ini dikembalikan ketika operasi AppendObject berhasil atau ketika terjadi kesalahan 409 karena posisi tidak sesuai dengan ukuran objek. |
x-oss-hash-crc64ecma | integer 64-bit | 3231342946509354535 | Menunjukkan nilai CRC 64-bit objek. CRC 64-bit ini dihitung berdasarkan standar CRC-64/XZ. |
Untuk informasi selengkapnya tentang header respons umum lainnya untuk operasi ini, lihat Header respons umum.
Metode perhitungan CRC-64
Anda dapat menggunakan metode berikut untuk melakukan perhitungan:
Perhitungan menggunakan modul 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(); }Perhitungan menggunakan Python crcmod
import crcmod do_crc64 = crcmod.mkCrcFun(0x142F0E1EBA9EA3693, initCrc=0, xorOut=0xffffffffffffffff, rev=True) print(do_crc64(b"123456789"))
Hubungan dengan operasi lain
Operasi lain | Deskripsi hubungan |
Jika Anda melakukan operasi PutObject pada objek Appendable yang sudah ada, objek Appendable tersebut akan ditimpa oleh objek baru, dan tipenya berubah menjadi Normal. | |
Operasi HeadObject pada objek Appendable mengembalikan x-oss-next-append-position, x-oss-hash-crc64ecma, dan x-oss-object-type. x-oss-object-type objek Appendable adalah Appendable. | |
Dalam respons permintaan GetBucket, Type objek Appendable diatur ke Appendable. |
Contoh
Contoh permintaan
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]Contoh respons
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****Contoh permintaan dengan pengendalian versi
Jika pengendalian versi diaktifkan untuk bucket, respons permintaan AppendObject mencakup header respons x-oss-version-id, yang menentukan ID versi objek versi terkini.
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=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218eContoh respons
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 untuk operasi ini tersedia dalam bahasa-bahasa berikut:
Antarmuka baris perintah ossutil
Untuk melakukan operasi ini menggunakan ossutil, lihat perintah append-object.
Kode kesalahan
Kode kesalahan | Kode status HTTP | Deskripsi |
ObjectNotAppendable | 409 | Operasi AppendObject dilakukan pada objek non-Appendable. |
PositionNotEqualToLength | 409 |
|
InvalidArgument | 400 | Nilai parameter seperti x-oss-storage-class dan x-oss-object-acl tidak valid. |
FileImmutable | 409 | Jika Anda mencoba menghapus atau mengubah data dalam bucket yang berada dalam status terlindungi, kode kesalahan ini dikembalikan. |
KmsServiceNotEnabled | 403 | Saat Anda menggunakan algoritma enkripsi KMS, Key Management Service (KMS) belum diaktifkan di Konsol. |