Topik ini menjelaskan cara menggunakan fitur unduhan rentang untuk mengunduh secara efisien rentang data tertentu dari sebuah file.
Catatan penggunaan
Kode contoh dalam topik ini menggunakan ID Wilayah China (Hangzhou),
cn-hangzhou. Secara default, titik akhir publik digunakan. Jika Anda ingin mengakses OSS dari produk Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir.Dalam topik ini, kredensial akses dibaca dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan Kredensial Akses.
Izin
Secara default, Akun Alibaba Cloud memiliki izin penuh. Pengguna RAM atau Peran RAM di bawah Akun Alibaba Cloud tidak memiliki izin apa pun secara default. Akun Alibaba Cloud atau administrator akun harus memberikan izin operasi melalui Kebijakan RAM atau Kebijakan Bucket.
API | Aksi | Definisi |
GetObject |
| Mengunduh objek. |
| Saat mengunduh objek, jika Anda menentukan versi objek melalui versionId, izin ini diperlukan. | |
| Saat mengunduh objek, jika metadata objek berisi X-Oss-Server-Side-Encryption: KMS, izin ini diperlukan. |
Definisi metode
func (c *Client) GetObject(ctx context.Context, request *GetObjectRequest, optFns ...func(*Options)) (*GetObjectResult, error)Parameter permintaan
Parameter | Tipe | Deskripsi |
ctx | context.Context | Konteks permintaan, yang dapat digunakan untuk menetapkan total periode timeout permintaan. |
request | *GetObjectRequest | Parameter permintaan untuk operasi API tertentu. Sebagai contoh, Anda dapat menetapkan parameter Range untuk menentukan rentang unduhan dan parameter RangeBehavior untuk menentukan perilaku unduhan rentang standar. Untuk informasi lebih lanjut, lihat GetObjectRequest. |
optFns | ...func(*Options) | Opsional. Parameter konfigurasi tingkat operasi. Untuk informasi lebih lanjut, lihat Options. |
Nilai kembali
Nilai kembali | Tipe | Deskripsi |
result | *GetObjectResult | Nilai kembali dari operasi API. Parameter ini valid ketika err adalah nil. Untuk informasi lebih lanjut, lihat GetObjectResult. |
err | error | Status permintaan. Jika permintaan gagal, err bukan nil. |
Untuk objek 1.000 byte, rentang unduhan yang valid adalah dari byte 0 hingga byte 999. Jika rentang yang ditentukan tidak valid, parameter Range tidak memiliki efek. Respons mengembalikan kode status 200, dan seluruh objek ditransfer. Contoh berikut menggambarkan permintaan yang tidak valid dan hasilnya:
Jika Anda menetapkan Range: bytes=500-2000, akhir rentang tidak valid. Seluruh file dikembalikan, dan kode status HTTP adalah 200.
Jika Anda menetapkan Range: bytes=1000-2000, awal rentang tidak valid. Seluruh file dikembalikan, dan kode status HTTP adalah 200.
Anda dapat menambahkan header permintaan x-oss-range-behavior:standard untuk menentukan perilaku unduhan rentang standar. Ini mengubah perilaku unduhan OSS untuk rentang yang tidak valid. Untuk objek 1.000 byte:
Jika Anda menetapkan Range: bytes=500-2000, akhir rentang tidak valid. Data dari byte 500 hingga byte 999 dikembalikan, dan kode status HTTP adalah 206.
Jika Anda menetapkan Range: bytes=1000-2000, awal rentang tidak valid. Kode status HTTP 416 dan kode kesalahan InvalidRange dikembalikan.
Kode contoh
Berikut adalah kode contoh yang menunjukkan cara menambahkan header permintaan RangeBehavior:standard untuk mengunduh data dari rentang tertentu file menggunakan perilaku unduhan standar.
package main
import (
"context"
"flag"
"io"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Tentukan variabel global.
var (
region string // Wilayah.
bucketName string // Nama bucket.
objectName string // Nama objek.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
flag.StringVar(&objectName, "object", "", "Nama objek.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Periksa apakah nama objek kosong.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama objek diperlukan")
}
// Muat konfigurasi default dan atur penyedia kredensial serta wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat permintaan untuk mendapatkan objek.
request := &oss.GetObjectRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
Key: oss.Ptr(objectName), // Nama objek.
Range: oss.Ptr("bytes=15-35"), // Tentukan rentang unduhan.
RangeBehavior: oss.Ptr("standard"), // Tentukan perilaku unduhan rentang standar.
}
// Jalankan operasi untuk mendapatkan objek dan proses hasilnya.
result, err := client.GetObject(context.TODO(), request)
if err != nil {
log.Fatalf("gagal mendapatkan objek %v", err)
}
defer result.Body.Close() // Pastikan bahwa badan respons ditutup saat fungsi berakhir.
log.Printf("hasil objek:%#v\n", result)
// Baca isi objek.
data, _ := io.ReadAll(result.Body)
log.Printf("badan:%s\n", data)
}
Referensi
Untuk kode contoh lengkap untuk unduhan rentang, lihat contoh GitHub.
Untuk informasi lebih lanjut tentang operasi API untuk unduhan rentang, lihat GetObject.