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:
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
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.