All Products
Search
Document Center

Object Storage Service:Unggah yang dapat dilanjutkan (Go SDK V1)

Last Updated:Nov 29, 2025

Anda dapat menggunakan unggah yang dapat dilanjutkan untuk mengunggah file berukuran lebih dari 5 GB ke OSS. Metode ini mencegah kegagalan unggahan akibat gangguan jaringan atau error program dengan membagi file besar menjadi beberapa shard dan mengunggahnya secara konkuren, sehingga mempercepat proses. Jika pengunggahan suatu shard gagal, proses dapat dilanjutkan dari titik pemeriksaan yang direkam dalam file titik pemeriksaan—tanpa perlu mengunggah ulang semua shard. Setelah seluruh shard diunggah, OSS secara otomatis menggabungkannya menjadi satu file.

Catatan

  • 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, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • 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 Konfigurasi client (Go SDK V1).

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

  • SDK mencatat status unggah dalam file titik pemeriksaan. Pastikan program memiliki izin menulis untuk file tersebut.

  • Jangan mengubah informasi verifikasi dalam file titik pemeriksaan. Jika file tersebut rusak, semua shard akan diunggah ulang.

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

Metode implementasi

Panggil metode Bucket.UploadFile untuk melakukan unggah yang dapat dilanjutkan. Anda dapat mengatur parameter dan opsi berikut:

Parameter

Deskripsi

objectKey

Nama file yang akan diunggah ke OSS. Ini sama dengan objectName.

filePath

Jalur file lokal yang akan diunggah.

partSize

Ukuran setiap shard. Nilainya harus berada dalam rentang 100 KB hingga 5 GB. Nilai default-nya adalah 100 KB.

options

Mencakup opsi berikut:

  • Routines: Menentukan jumlah shard yang diunggah secara konkuren. Nilai default-nya adalah 1, yang berarti unggah konkuren tidak digunakan.

  • Checkpoint: Menentukan apakah unggah yang dapat dilanjutkan diaktifkan dan mengatur file titik pemeriksaan. Unggah yang dapat dilanjutkan dinonaktifkan secara default.

    Contohnya, oss.Checkpoint(true, "") mengaktifkan unggah yang dapat dilanjutkan dan menetapkan file titik pemeriksaan ke file.cp di folder yang sama dengan file lokal. Dalam kasus ini, file adalah nama file lokal. Anda juga dapat menggunakan oss.Checkpoint(true, "your-cp-file.cp") untuk menentukan file titik pemeriksaan secara eksplisit.

Catatan

Untuk informasi selengkapnya, lihat Atur metadata file.

Kode contoh

Kode berikut memberikan contoh cara melakukan unggah yang dapat dilanjutkan.

package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Gagal membuat penyedia kredensial: %v", err)
	}

	// Buat instans OSSClient.
	// Atur yourEndpoint ke Endpoint bucket. Misalnya, untuk wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, sesuaikan nilai Endpoint-nya.
	// Atur yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur nilainya ke cn-hangzhou. Untuk wilayah lain, sesuaikan nilainya.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Atur versi signature.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Gagal membuat client OSS: %v", err)
	}

	// Tentukan nama bucket, misalnya examplebucket.
	bucket, err := client.Bucket("examplebucket")
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket: %v", err)
	}

	// Saat menggunakan UploadFile untuk unggah yang dapat dilanjutkan, jumlah shard tidak boleh melebihi 10.000.
	// Anda perlu menentukan ukuran setiap shard berdasarkan ukuran file yang ingin diunggah. Ukuran setiap shard dapat berkisar antara 100 KB hingga 5 GB. Nilai default-nya adalah 100 KB (100 * 1024 byte).
	// Gunakan oss.Routines untuk menentukan tiga shard yang diunggah secara konkuren.
	// Atur yourObjectName ke jalur lengkap objek. Jalur lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt.
	// Atur yourLocalFile ke jalur lengkap file lokal, misalnya, D:\\localpath\\examplefile.txt. Jika jalur lokal tidak ditentukan, file akan diunggah dari jalur default proyek program contoh.
	err = bucket.UploadFile("exampledir/exampleobject.txt", "D:\\localpath\\examplefile.txt", 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
	if err != nil {
		log.Fatalf("Gagal mengunggah file: %v", err)
	}

	log.Println("File berhasil diunggah.")
}

FAQ

Apa yang harus saya lakukan jika terjadi error "Too many parts, Please increase part size." selama unggah yang dapat dilanjutkan?

Referensi

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

  • Untuk informasi selengkapnya mengenai operasi API untuk unggah yang dapat dilanjutkan, lihat UploadFile.