All Products
Search
Document Center

Object Storage Service:Unggah multi-bagian (C# SDK V2)

Last Updated:Nov 09, 2025

OSS menyediakan fitur unggah multi-bagian yang memungkinkan Anda membagi objek besar menjadi beberapa bagian dan mengunggahnya secara terpisah. Setelah semua bagian diunggah, Anda dapat memanggil operasi CompleteMultipartUploadAsync untuk menggabungkan bagian-bagian ini menjadi satu objek lengkap.

Catatan

  • Kode contoh dalam topik ini menggunakan ID wilayah cn-hangzhou dari wilayah China (Hangzhou) sebagai contoh dan menggunakan titik akhir publik secara default. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang pemetaan antara wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan titik akhir OSS.

  • Untuk mengimplementasikan multipart upload, Anda harus memiliki izin oss:PutObject. Untuk informasi lebih lanjut, lihat Memberikan izin kustom kepada pengguna RAM.

Proses multipart upload

Untuk mengimplementasikan multipart upload, ikuti langkah-langkah berikut:

  1. Inisialisasi tugas multipart upload.

    Panggil metode Client.InitiateMultipartUploadAsync untuk mendapatkan ID unggah unik global yang dibuat oleh OSS.

  2. Unggah bagian.

    Panggil metode Client.UploadPartAsync untuk mengunggah data bagian.

    Catatan
    • Untuk bagian yang diunggah dengan menjalankan tugas multipart upload dengan ID unggah tertentu, nomor bagian menentukan posisi relatif mereka dalam sebuah objek. Jika Anda mengunggah sebuah bagian dan menggunakan kembali nomor bagiannya untuk mengunggah bagian lain, bagian baru akan menimpa bagian aslinya.

    • OSS menyertakan hash MD5 dari setiap bagian yang diunggah dalam header ETag pada respons.

    • OSS menghitung hash MD5 dari data yang diunggah dan membandingkannya dengan hash MD5 yang dihitung oleh SDK. Jika kedua hash berbeda, OSS mengembalikan kode kesalahan InvalidDigest.

  3. Selesaikan tugas multipart upload.

    Setelah semua bagian diunggah, panggil metode Client.CompleteMultipartUploadAsync untuk menggabungkan bagian-bagian ini menjadi satu objek lengkap.

Kode contoh

Berikut adalah kode contoh yang menunjukkan cara membagi file lokal besar menjadi beberapa bagian, mengunggah bagian-bagiannya ke bucket, dan kemudian menggabungkan bagian-bagian ini menjadi satu objek lengkap:

using OSS = AlibabaCloud.OSS.V2;  // Buat alias untuk Alibaba Cloud OSS SDK untuk menyederhanakan penggunaan selanjutnya

var region = "cn-hangzhou";  // Diperlukan. Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou
var endpoint = null as string;  // Opsional. Tentukan titik akhir yang digunakan untuk mengakses OSS. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com
var bucket = "nama bucket Anda";  // Diperlukan. Tentukan nama bucket
var key = "kunci objek Anda";  // Diperlukan. Tentukan nama objek yang akan diunggah
var partSize = 512*1024;  // Diperlukan. Tentukan ukuran setiap bagian yang akan diunggah. Dalam contoh ini, ukuran setiap bagian adalah 512 KB
var filePath = "jalurFile";  // Diperlukan. Tentukan jalur file yang akan diunggah

// Muat konfigurasi default OSS SDK, yang secara otomatis membaca informasi kredensial (seperti AccessKey) dari variabel lingkungan
var cfg = OSS.Configuration.LoadDefault();
// Secara eksplisit atur untuk menggunakan variabel lingkungan untuk kredensial yang digunakan untuk verifikasi identitas (format: OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET)
cfg.CredentialsProvider = new OSS.Credentials.EnvironmentVariableCredentialsProvider();
// Atur wilayah bucket dalam konfigurasi
cfg.Region = region;   
// Jika titik akhir ditentukan, timpa titik akhir default 
if(endpoint != null) 
{
    cfg.Endpoint = endpoint;
} 

// Buat instance klien OSS menggunakan informasi konfigurasi
using var client = new OSS.Client(cfg); 

// Inisialisasi multipart upload
var initResult = await client.InitiateMultipartUploadAsync(new()
{
    Bucket = bucket,
    Key = key
});

// Buka file yang akan diunggah
using var file = File.OpenRead(filePath);
long fileSize = file.Length;
long partNumber = 1;

// Simpan informasi tentang semua bagian yang diunggah
var uploadParts = new List<OSS.Models.UploadPart>();

// Unggah file dalam bagian
for (long offset = 0; offset < fileSize; offset += partSize)
{
    // Hitung ukuran bagian saat ini
    var size = Math.Min(partSize, fileSize - offset);
    // Unggah satu bagian
    var upResult = await client.UploadPartAsync(new()
    {
        Bucket = bucket,
        Key = key,
        PartNumber = partNumber,
        UploadId = initResult.UploadId,
        Body = new OSS.IO.BoundedStream(file, offset, size)
    });

    // Simpan informasi bagian untuk menyelesaikan unggahan nanti
    uploadParts.Add(new() { PartNumber = partNumber, ETag = upResult.ETag });
    partNumber++;
}

// Urutkan berdasarkan nomor bagian
uploadParts.Sort((left, right) => { return (left.PartNumber > right.PartNumber) ? 1 : -1; });

// Selesaikan multipart upload
var cmResult = await client.CompleteMultipartUploadAsync(new()
{
    Bucket = bucket,
    Key = key,
    UploadId = initResult.UploadId,
    CompleteMultipartUpload = new ()
    {
        Parts = uploadParts
    }
});

// Tampilkan hasil unggahan
Console.WriteLine("MultipartUpload selesai");  // Menunjukkan operasi telah selesai
Console.WriteLine($"KodeStatus: {cmResult.StatusCode}");  // Kode status HTTP
Console.WriteLine($"RequestId: {cmResult.RequestId}");  // RequestId, digunakan untuk pemecahan masalah Alibaba Cloud
Console.WriteLine("Header Respons:");  // Informasi header respons
cmResult.Headers.ToList().ForEach(x => Console.WriteLine(x.Key + " : " + x.Value));  // Telusuri dan cetak semua header respons

Referensi

Untuk kode contoh lengkap untuk multipart upload, lihat multipartUpload.cs.