All Products
Search
Document Center

Object Storage Service:Unggah yang dapat dilanjutkan (C++ SDK)

Last Updated:Nov 30, 2025

Saat menggunakan unggah yang dapat dilanjutkan untuk mengunggah file ke Object Storage Service (OSS), Anda dapat menentukan file checkpoint. Jika pengunggahan terganggu oleh error jaringan atau crash program, proses akan dilanjutkan dari posisi yang dicatat dalam file checkpoint tersebut.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya yang berada 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 ingin membuat OSSClient dengan nama domain kustom atau Security Token Service (STS), lihat Buat instans OssClient.

  • Untuk melakukan unggah yang dapat dilanjutkan, Anda harus memiliki izin oss:PutObject. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.

  • Saat menggunakan unggah yang dapat dilanjutkan, progres pengunggahan direkam dalam file checkpoint. Jika suatu bagian gagal diunggah, pengunggahan akan dilanjutkan dari titik yang dicatat dalam file checkpoint tersebut. Setelah pengunggahan selesai, file checkpoint akan dihapus.

  • Jangan ubah informasi verifikasi dalam file checkpoint. Jika file checkpoint rusak, semua shard akan diunggah ulang.

  • Jika file lokal berubah selama proses pengunggahan, semua shard akan diunggah ulang.

Implementasi

Anda dapat menggunakan metode client.ResumableUploadObject untuk melakukan unggah yang dapat dilanjutkan. UploadObjectRequest dalam metode ini mencakup parameter berikut:

Parameter

Deskripsi

Wajib

Nilai default

Cara mengatur

bucket

Nama bucket.

Ya

Tidak ada

Diatur dalam konstruktor.

key

Nama file yang akan diunggah ke OSS.

Ya

Tidak ada

filePath

Nama file lokal yang akan diunggah.

Tidak

Tidak ada

partSize

Ukuran setiap bagian. Nilainya harus berada dalam rentang 100 KB hingga 5 GB.

Tidak

8 MB

Gunakan setPartSize.

threadNum

Jumlah thread konkuren untuk unggah multi-bagian.

Tidak

3

Diatur dalam konstruktor atau gunakan setThreadNum.

checkpointDir

File yang mencatat progres pengunggahan. Jika pengunggahan terganggu, proses dilanjutkan dari titik yang dicatat dalam file ini. File ini dihapus setelah pengunggahan selesai.

Tidak

Folder yang sama dengan DownloadFile.

Diatur dalam konstruktor atau gunakan setCheckpointDir.

Kode contoh

Kode berikut memberikan contoh cara melakukan unggah yang dapat dilanjutkan.

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah 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";
    /* Tentukan path lengkap file lokal, misalnya D:\\localpath\\examplefile.txt. Jika Anda tidak menentukan path lokal, file akan diunggah dari path lokal yang sesuai dengan proyek tempat program contoh berada. */
    std::string UploadFilePath = "D:\\localpath\\examplefile.txt";
    /* File yang mencatat hasil pengunggahan bagian lokal. Progres pengunggahan disimpan dalam file ini. Jika suatu bagian gagal diunggah, upaya pengunggahan berikutnya akan dilanjutkan dari breakpoint yang dicatat dalam file ini. Setelah pengunggahan selesai, file ini dihapus. */
    /* Atur direktori tempat file checkpoint disimpan dan pastikan direktori yang ditentukan sudah ada, misalnya D:\\local. Jika nilai ini tidak diatur, informasi checkpoint tidak akan direkam dan unggah yang dapat dilanjutkan tidak digunakan. */
    std::string CheckpointFilePath = "D:\\local";

    /* Inisialisasi jaringan dan sumber daya lainnya. */
    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 diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Lakukan unggah yang dapat dilanjutkan. */
    UploadObjectRequest request(BucketName, ObjectName, UploadFilePath, CheckpointFilePath);
    auto outcome = client.ResumableUploadObject(request);

    if (!outcome.isSuccess()) {
        /* Tangani exception. */
        std::cout << "ResumableUploadObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan jaringan dan sumber daya lainnya. */
    ShutdownSdk();
    return 0;
}

Referensi

Untuk kode contoh lengkap mengenai unggah yang dapat dilanjutkan, lihat contoh di GitHub.