全部产品
Search
文档中心

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

更新时间:Nov 29, 2025

Pengunduhan file besar dapat gagal akibat jaringan yang tidak stabil atau pengecualian program. Bahkan setelah beberapa kali percobaan, pengunduhan tersebut 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 satu file utuh.

Catatan penggunaan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Initialization.

  • Untuk melakukan unduhan yang dapat dilanjutkan, Anda harus memiliki izin oss:GetObject. Untuk informasi selengkapnya, lihat Attach a custom policy to a RAM user.

Kode contoh

Kode berikut menunjukkan contoh cara melakukan unduhan yang dapat dilanjutkan:

using Aliyun.OSS;
using Aliyun.OSS.Common;

// 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.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah ditetapkan.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket.
var bucketName = "examplebucket";
// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
var objectName = "exampleobject.txt";
// Unduh objek ke file lokal bernama examplefile.txt dan simpan ke path lokal yang ditentukan (D:\\localpath). Jika file lokal sudah ada, file tersebut akan ditimpa. Jika file lokal belum ada, file tersebut akan dibuat.
// Jika Anda tidak menentukan path lokal, file yang diunduh akan disimpan ke path lokal proyek tempat program contoh berada.
var downloadFilename = "D:\\localpath\\examplefile.txt";
// Tentukan path lengkap file catatan checkpoint. Contoh: D:\\localpath\\examplefile.txt.dcp.
// Anda hanya perlu menentukan file catatan checkpoint ketika pengunduhan terputus dan file catatan checkpoint telah dihasilkan. Setelah pengunduhan selesai, file ini akan dihapus.
var checkpointDir = "D:\\localpath\\examplefile.txt.dcp";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instans ClientConfiguration dan ubah parameter default sesuai kebutuhan.
var conf = new ClientConfiguration();

// Tetapkan versi signature ke V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instans OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // Tetapkan beberapa parameter dalam DownloadObjectRequest.
    DownloadObjectRequest request = new DownloadObjectRequest(bucketName, objectName, downloadFilename)
    {
        // Tentukan ukuran setiap shard untuk pengunduhan dalam byte.
        PartSize = 8 * 1024 * 1024,
        // Tentukan jumlah thread konkuren.
        ParallelThreadCount = 3,
        // checkpointDir digunakan untuk menyimpan progres unduhan yang dapat dilanjutkan. Jika pengunduhan suatu shard gagal, pengunduhan akan dilanjutkan dari checkpoint yang terekam saat Anda mencoba lagi. Jika checkpointDir diatur ke null, fitur unduhan yang dapat dilanjutkan dinonaktifkan. Pengunduhan akan dimulai dari awal setelah setiap kegagalan.
        CheckpointDir = checkpointDir,
    };
    // Lakukan unduhan yang dapat dilanjutkan.
    client.ResumableDownloadObject(request);
    Console.WriteLine("Unduhan yang dapat dilanjutkan objek:{0} berhasil", objectName);
}
catch (OssException ex)
{
    Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
}

Referensi

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