Topik ini menjelaskan cara melakukan unduhan rentang, yang memungkinkan Anda mengambil bagian spesifik dari suatu file secara efisien.
Catatan penggunaan
Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya 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 mengenai 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 unduhan rentang, Anda harus memiliki izin
oss:GetObject. Untuk informasi selengkapnya, lihat Berikan izin kustom kepada RAM user.
Kode contoh
Kode berikut menunjukkan cara mengunduh data dari rentang tertentu dalam suatu file.
package main
import (
"io"
"log"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Error: %v", err)
}
// Buat instans OSSClient.
// Setel yourEndpoint ke Endpoint bucket. Misalnya, untuk bucket di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Untuk wilayah lain, gunakan Endpoint yang sesuai.
// Setel yourRegion ke wilayah tempat bucket berada. Misalnya, untuk bucket di wilayah China (Hangzhou), setel wilayah ke cn-hangzhou. Untuk wilayah lain, gunakan wilayah yang sesuai.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Setel versi signature.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error: %v", err)
}
// Tentukan nama bucket.
bucketName := "yourBucketName"
bucket, err := client.Bucket(bucketName)
if err != nil {
log.Fatalf("Error: %v", err)
}
// Unggah konten sebesar 1.000 byte.
strContent := ""
for i := 0; i < 100; i++ {
strContent += "abcdefghij"
}
log.Printf("content len: %d\n", len(strContent))
// Unggah string tersebut.
objectName := "yourObjectName"
err = bucket.PutObject(objectName, strings.NewReader(strContent))
if err != nil {
log.Fatalf("Error: %v", err)
}
// Ambil data dalam rentang byte 15 hingga 35. Ini mencakup byte 15 dan 35, total 21 byte.
// Jika rentang yang ditentukan tidak valid (misalnya, posisi awal atau akhir bernilai negatif atau melebihi ukuran file), seluruh file akan diunduh.
body, err := bucket.GetObject(objectName, oss.Range(15, 35))
if err != nil {
log.Fatalf("Error: %v", err)
}
defer body.Close()
// Baca data ke dalam memori.
data, err := io.ReadAll(body)
if err != nil {
log.Fatalf("Error: %v", err)
}
log.Printf("data: %s", string(data))
}
FAQ
Apa yang terjadi jika saya menentukan rentang unduhan yang tidak valid?
Apa itu unduhan rentang dengan perilaku standar?
Referensi
Untuk kode contoh lengkap mengenai unduhan rentang, lihat Contoh GitHub.
Untuk informasi selengkapnya mengenai operasi API untuk unduhan rentang, lihat GetObject.