All Products
Search
Document Center

Object Storage Service:Unduhan yang dapat dilanjutkan menggunakan OSS SDK untuk Python 1.0

Last Updated:Aug 16, 2025

Mengunduh objek besar dapat gagal akibat jaringan yang tidak stabil atau pengecualian lainnya. Dalam beberapa kasus, unduhan tetap gagal meskipun telah dicoba beberapa kali. Untuk mengatasi masalah ini, Object Storage Service (OSS) menyediakan fitur unduhan yang dapat dilanjutkan. Dengan fitur ini, OSS membagi objek menjadi beberapa bagian dan mengunduh setiap bagian secara terpisah. Setelah semua bagian diunduh, OSS menggabungkannya menjadi satu objek lengkap.

Catatan penggunaan

  • Dalam topik ini, titik akhir publik wilayah China (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 menggunakan unduhan yang dapat dilanjutkan, Anda harus memiliki izin oss:GetObject. Untuk informasi lebih lanjut, lihat Lampirkan Kebijakan Kustom ke Pengguna RAM.

Prosedur

Untuk menggunakan unduhan yang dapat dilanjutkan, ikuti langkah-langkah berikut:

  1. Buat file lokal sementara dengan nama yang terdiri dari nama objek asli dan akhiran acak.

  2. Tentukan Header Range dalam permintaan HTTP sehingga objek dibaca berdasarkan rentang. Kemudian, konten yang dibaca ditulis ke posisi yang sesuai pada file lokal sementara.

  3. Setelah unduhan selesai, ubah nama file sementara menjadi file tujuan. Jika file tujuan sudah ada, data yang diunduh akan menimpa data dalam file yang ada. Jika tidak, file baru akan dibuat.

Peringatan

Satu informasi checkpoint dapat menimpa yang lain di disk lokal, atau satu nama file sementara dapat bertabrakan dengan yang lain. Oleh karena itu, jangan gunakan beberapa program atau thread untuk memanggil metode oss2.resumable_download secara bersamaan untuk mengunduh objek yang sama ke file tujuan yang sama.

Contoh

Kode sampel berikut memberikan contoh cara melakukan unduhan yang dapat dilanjutkan:

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

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke 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)

# Tentukan jalur penuh objek. Jangan sertakan nama bucket dalam jalur penuh. Contoh: exampledir/exampleobject.txt. 
# Tentukan jalur penuh file lokal. Contoh: D:\\localpath\\examplefile.txt. 
oss2.resumable_download(bucket, 'exampledir/exampleobject.txt', 'D:\\localpath\\examplefile.txt')
# Jika Anda tidak menentukan direktori menggunakan parameter store, direktori .py-oss-upload dibuat di direktori HOME untuk menyimpan informasi checkpoint. 

# Anda dapat mengonfigurasi parameter opsional berikut jika menggunakan OSS SDK untuk Python versi 2.1.0 atau lebih baru. 
# import sys
# # Jika panjang data yang akan diunduh tidak dapat ditentukan, nilai total_bytes adalah None. 
# def percentage(consumed_bytes, total_bytes):
#     if total_bytes:
#         rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
#         print('\r{0}% '.format(rate), end='')
#         sys.stdout.flush()
# # Jika Anda menggunakan parameter store untuk menentukan direktori, informasi checkpoint disimpan di direktori yang ditentukan. Jika Anda menggunakan parameter num_threads untuk menentukan jumlah thread unduhan bersamaan, pastikan nilai oss2.defaults.connection_pool_size lebih besar dari atau sama dengan jumlah thread unduhan bersamaan. Jumlah default thread bersamaan adalah 1. 
# oss2.resumable_download(bucket,  'exampledir/exampleobject.txt', 'D:\\localpath\\examplefile.txt',
#                       store=oss2.ResumableDownloadStore(root='/tmp'),
#                       # Tentukan bahwa unduhan yang dapat dilanjutkan digunakan ketika panjang objek lebih besar dari atau sama dengan nilai parameter multipart_threshold. Parameter multipart_threshold bersifat opsional dan nilai defaultnya adalah 10 MB. 
#                       multiget_threshold=100*1024,
#                       # Tentukan ukuran setiap bagian. Unit: byte. Ukuran bagian valid berkisar antara 100 KB hingga 5 GB. Ukuran bagian default adalah 100 KB. 
#                       part_size=100*1024,
#                       # Konfigurasikan fungsi callback yang ingin Anda gunakan untuk menunjukkan kemajuan tugas unduhan yang dapat dilanjutkan. 
#                       progress_callback=percentage,
#                       # Jika Anda menggunakan num_threads untuk menyetel jumlah thread unduhan bersamaan, atur oss2.defaults.connection_pool_size ke nilai yang lebih besar dari atau sama dengan jumlah thread unduhan bersamaan. Jumlah default thread bersamaan adalah 1. 
#                       num_threads=4)

Referensi

  • Untuk kode sampel lengkap untuk unduhan yang dapat dilanjutkan, kunjungi GitHub.

  • Untuk informasi lebih lanjut tentang operasi API untuk unduhan yang dapat dilanjutkan, lihat GetObject.