全部产品
Search
文档中心

Object Storage Service:Unduhan rentang menggunakan OSS SDK untuk Python 1.0

更新时间:Aug 16, 2025

Anda dapat menggunakan fitur unduhan rentang untuk mengunduh sebagian data tertentu dari sebuah objek.

Catatan penggunaan

  • Dalam topik ini, titik akhir publik wilayah Tiongkok (Hangzhou) digunakan. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir OSS.

  • Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses menggunakan OSS SDK untuk Python 1.0.

  • Dalam topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient dengan menggunakan nama domain kustom atau Layanan Token Keamanan (STS), lihat Inisialisasi.

  • Untuk melakukan unduhan rentang, Anda harus memiliki izin oss:GetObject. Untuk informasi lebih lanjut, lihat Lampirkan kebijakan kustom ke Pengguna RAM.

Tentukan rentang valid untuk diunduh

Kode sampel berikut menunjukkan cara menentukan rentang valid untuk mengunduh file.

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Tentukan ID wilayah yang sesuai dengan titik akhir. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"

# Tentukan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Jika sebuah objek berukuran 1.000 byte, rentang validnya adalah dari byte 0 hingga byte 999. 
# Kueri data yang berada dalam rentang dari byte 0 hingga byte 999, yang mencakup total 1.000 byte. Jika rentang nilai yang ditentukan tidak valid, seluruh objek akan diunduh. Misalnya, jika awal atau akhir rentang yang ditentukan adalah angka negatif atau nilai yang ditentukan lebih besar dari ukuran objek, semua konten objek akan diunduh. 
object_stream = bucket.get_object('<yourObjectName>', byte_range=(0, 999))

Tentukan rentang unduhan tidak valid

Misalkan Anda memiliki objek berukuran 1.000 byte. Rentang unduhan valid adalah dari 0 hingga 999. Jika rentang yang ditentukan tidak valid, header Range tidak akan berlaku. Tanggapan akan mengembalikan kode status HTTP 200 beserta konten seluruh objek. Tabel berikut menjelaskan permintaan tidak valid dan tanggapannya.

  • Jika Anda mengatur Range: bytes menjadi 500-2000, nilai di akhir rentang tidak valid. Konten seluruh file dikembalikan, dan kode status HTTP adalah 200.

  • Jika Anda mengatur Range: bytes menjadi 1000-2000, nilai di awal rentang tidak valid. Konten seluruh file dikembalikan, dan kode status HTTP adalah 200.

Tentukan perilaku standar untuk mengunduh data berdasarkan rentang

Anda dapat menambahkan header permintaan x-oss-range-behavior:standard untuk mengubah perilaku unduhan OSS ketika rentang yang ditentukan tidak valid. Misalkan Anda memiliki objek berukuran 1.000 byte.

  • Jika Anda mengatur Range: bytes menjadi 500-2000, nilai di akhir rentang tidak valid. Konten dalam rentang 500 hingga 999 byte dikembalikan, dan kode status HTTP adalah 206.

  • Jika Anda mengatur Range: bytes menjadi 1000-2000, nilai di awal rentang tidak valid. Kode status HTTP 416 dan kode kesalahan InvalidRange dikembalikan.

Kode berikut menunjukkan contoh cara melakukan unduhan rentang berdasarkan perilaku standar.

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Tentukan ID wilayah yang sesuai dengan titik akhir. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"

# Tentukan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)


# Buat objek yang berukuran 1.000 byte. 
object_name = 'rangeTest.txt'
content = 'a' * 1000
bucket.put_object(object_name, content)

headers = {'x-oss-range-behavior': 'standard'}

# Jika nilai di akhir rentang tidak valid, OSS mengembalikan data yang berada dalam rentang dari byte 500 hingga byte 999 dan kode status HTTP 206. 
object_stream = bucket.get_object(object_name, byte_range=(500, 2000), headers=headers)
print('standard get 500~2000 http status code:', object_stream.status)
print('standard get 500~2000 contnet_length:', object_stream.content_length)

try:
    # Jika nilai di awal rentang tidak valid, pengecualian dilemparkan. Lalu, OSS mengembalikan kode status HTTP 416 dan kode kesalahan InvalidRange. 
    object_stream = bucket.get_object(object_name, byte_range=(1000, 2000), headers=headers)
except oss2.exceptions.ServerError as e:
    print('standard get 1000~2000 http status code:', e.status)
    print('standard get 1000~2000 error code:', e.code)  

Referensi

  • Untuk kode sampel lengkap yang digunakan untuk melakukan unduhan rentang, kunjungi GitHub.

  • Untuk informasi lebih lanjut tentang operasi API yang dapat Anda panggil untuk melakukan unduhan rentang, lihat GetObject.