All Products
Search
Document Center

Object Storage Service:Unduhan rentang (Go SDK V2)

Last Updated:Nov 09, 2025

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

oss:GetObject

Mengunduh objek.

oss:GetObjectVersion

Saat mengunduh objek, jika Anda menentukan versi objek melalui versionId, izin ini diperlukan.

kms:Decrypt

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.

Penting
  • 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(&region, "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.