Unggah tambahan menambahkan konten ke objek yang dapat ditambahkan yang sudah ada menggunakan metode AppendObject.
Catatan penggunaan
Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Buat instans OssClient.
Jika file tidak ada, pemanggilan operasi AppendObject akan membuat objek yang dapat ditambahkan.
Jika file sudah ada:
Jika file tersebut merupakan objek yang dapat ditambahkan dan posisi tambah yang ditentukan sesuai dengan panjang file saat ini, konten akan ditambahkan ke akhir file.
Jika file tersebut merupakan objek yang dapat ditambahkan tetapi posisi tambah yang ditentukan tidak sesuai dengan panjang file saat ini, pengecualian PositionNotEqualToLength akan dilemparkan.
Jika file tersebut bukan objek yang dapat ditambahkan, seperti objek Normal yang diunggah melalui simple upload, pengecualian ObjectNotAppendable akan dilemparkan.
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 Kebijakan bucket.
API | Action | Definisi |
AppendObject |
| Anda dapat memanggil operasi ini untuk mengunggah objek dengan menambahkannya 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. |
Kode contoh
Kode berikut menunjukkan cara menambahkan data ke objek:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Region ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
auto meta = ObjectMetaData();
meta.setContentType("text/plain");
/* Posisi untuk operasi tambah pertama adalah 0. Nilai kembali menunjukkan posisi untuk operasi tambah berikutnya. Posisi untuk operasi tambah selanjutnya adalah panjang objek sebelum penambahan. */
std::shared_ptr<std::iostream> content1 = std::make_shared<std::stringstream>();
*content1 <<"Thank you for using Alibaba Cloud Object Storage Service!";
AppendObjectRequest request(BucketName, ObjectName, content1, meta);
request.setPosition(0L);
/* Tambahkan data ke objek untuk pertama kalinya. */
auto result = client.AppendObject(request);
if (!result.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "AppendObject fail" <<
",code:" << result.error().Code() <<
",message:" << result.error().Message() <<
",requestId:" << result.error().RequestId() << std::endl;
return -1;
}
std::shared_ptr<std::iostream> content2 = std::make_shared<std::stringstream>();
*content2 <<"Thank you for using Alibaba Cloud Object Storage Service!";
auto position = result.result().Length();
AppendObjectRequest appendObjectRequest(BucketName, ObjectName, content2);
appendObjectRequest.setPosition(position);
/* Tambahkan data ke objek untuk kedua kalinya. */
auto outcome = client.AppendObject(appendObjectRequest);
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "AppendObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Referensi
Untuk kode contoh lengkap mengenai unggah tambahan, lihat contoh GitHub.
Untuk informasi selengkapnya mengenai operasi API untuk unggah tambahan, lihat AppendObject.