All Products
Search
Document Center

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

Last Updated:Nov 30, 2025

Mengunduh file besar dapat gagal akibat jaringan yang tidak stabil atau pengecualian program. Bahkan setelah beberapa kali mencoba ulang, pengunduhan terkadang tetap gagal. Untuk mengatasi masalah ini, Object Storage Service (OSS) menyediakan fitur unduhan yang dapat dilanjutkan, yang membagi file menjadi beberapa bagian, mengunduh tiap bagian secara terpisah, lalu menggabungkannya kembali menjadi file lengkap.

Catatan penggunaan

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

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

Metode implementasi

Anda dapat menggunakan metode OssClient.ResumableDownloadObject untuk melakukan unduhan yang dapat dilanjutkan. Parameter DownloadObjectRequest untuk metode ini mencakup hal-hal berikut:

Parameter

Deskripsi

Wajib

Nilai default

Cara mengatur

bucket

Nama bucket.

Ya

Tidak ada

Diatur dalam konstruktor.

key

Jalur lengkap file OSS.

Ya

Tidak ada

Diatur dalam konstruktor.

filePath

Jalur lengkap file lokal.

Tidak

Nama file OSS

Diatur dalam konstruktor.

partSize

Ukuran shard. Nilainya harus antara 100 KB hingga 5 GB.

Tidak

8 MB

Diatur menggunakan setPartSize.

threadNum

Jumlah unduhan shard konkuren.

Tidak

3

Diatur dalam konstruktor atau menggunakan setThreadNum.

checkpointDir

File yang mencatat hasil unduhan shard lokal. Atur parameter ini untuk mengaktifkan fitur unduhan yang dapat dilanjutkan. Informasi progres disimpan ke file ini selama pengunduhan. Jika pengunduhan suatu shard gagal, percobaan unduhan berikutnya akan dilanjutkan dari titik yang tercatat dalam file tersebut. Setelah pengunduhan selesai, file ini dihapus.

Tidak

Folder yang sama dengan file unduhan.

Diatur dalam konstruktor atau menggunakan setCheckpointDir.

Contoh kode

Kode berikut menunjukkan cara melakukan unduhan yang dapat dilanjutkan:

#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 ID Wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan ID Wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket, misalnya examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan jalur lengkap objek. Jalur lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";
    /* Unduh objek ke file lokal bernama examplefile.txt dan simpan ke jalur lokal yang ditentukan (D:\\localpath). Jika file lokal sudah ada, file tersebut akan ditimpa. Jika belum ada, file tersebut akan dibuat. */
    /* Jika Anda tidak menentukan jalur lokal, file yang diunduh akan disimpan ke jalur lokal proyek secara default. */
    std::string DownloadFilePath = "D:\\localpath\\examplefile.txt";
    /* Tetapkan folder untuk file catatan checkpoint dan pastikan folder yang ditentukan sudah ada, misalnya D:\\localpath. */
    /* Jika pengunduhan objek terganggu dan file catatan checkpoint dihasilkan, Anda harus menetapkan file catatan checkpoint yang sesuai untuk melanjutkan pengunduhan. Setelah pengunduhan selesai, file ini dihapus. */
    std::string CheckpointFilePath = "D:\\localpath";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh kode 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 unduhan yang dapat dilanjutkan. */
    DownloadObjectRequest request(BucketName, ObjectName, DownloadFilePath, CheckpointFilePath);
    auto outcome = client.ResumableDownloadObject(request);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "ResumableDownloadObject gagal" <<
        ",kode:" << outcome.error().Code() <<
        ",pesan:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

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

Referensi

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

  • Untuk informasi selengkapnya mengenai operasi API untuk unduhan yang dapat dilanjutkan, lihat GetObject.