Saat mengunggah objek ke Object Storage Service (OSS) menggunakan unggah yang dapat dilanjutkan, Anda dapat menentukan direktori untuk file titik pemeriksaan yang mencatat kemajuan pengunggahan. Jika pengunggahan gagal karena pengecualian jaringan atau kesalahan program, tugas akan dilanjutkan dari posisi tercatat dalam file titik pemeriksaan.
Perhatian
Dalam topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk detail tentang wilayah dan titik akhir yang didukung, lihat Wilayah dan Titik Akhir.
Dalam topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi Kredensial Akses (Python SDK V1).
Dalam topik ini, instans OSSClient dibuat dengan menggunakan titik akhir OSS. Jika ingin membuat instans OSSClient dengan menggunakan nama domain kustom atau Security Token Service (STS), lihat Inisialisasi.
Unggah yang dapat dilanjutkan memerlukan izin
oss:PutObjectdan oss:ListParts. Untuk informasi lebih lanjut, lihat Berikan Kebijakan Akses Khusus kepada Pengguna RAM.Unggah yang dapat dilanjutkan bersifat multi-threaded. Hindari menggunakan multi-threading eksternal saat memanggil fungsi ini, karena dapat menyebabkan transmisi data berulang.
Anda dapat meningkatkan ukuran bagian untuk kondisi jaringan yang lebih baik dan menurunkannya untuk kondisi jaringan yang buruk.
Contoh kode
Berikut adalah contoh kode yang menunjukkan cara melakukan unggah yang dapat dilanjutkan.
# -*- 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 China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan wilayah tempat bucket berada, seperti cn-hangzhou. Perhatikan bahwa parameter ini diperlukan untuk tanda tangan V4.
region = "cn-hangzhou"
# Atur yourBucketName ke nama bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Atur yourObjectName ke jalur lengkap objek. Jalur lengkap tidak boleh berisi nama bucket. Contoh: exampledir/exampleobject.txt.
# Atur yourLocalFile ke jalur lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. Jika Anda tidak menentukan jalur lokal, file akan diunggah dari jalur lokal yang sesuai dengan proyek tempat program sampel ini berada.
oss2.resumable_upload(bucket, 'exampledir/exampleobject.txt', 'D:\\localpath\\examplefile.txt')
# Jika Anda tidak menggunakan parameter store untuk menentukan direktori, direktori .py-oss-upload dibuat di direktori HOME untuk menyimpan informasi breakpoint.
# Python SDK 2.1.0 dan versi lebih baru mendukung parameter opsional berikut untuk unggah yang dapat dilanjutkan.
# import sys
# # Jika panjang data yang akan diunggah 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 breakpoint disimpan di direktori yang ditentukan. Jika Anda menggunakan num_threads untuk mengatur jumlah utas unggah bersamaan, atur oss2.defaults.connection_pool_size ke nilai yang lebih besar atau sama dengan jumlah utas unggah bersamaan. Jumlah default utas unggah bersamaan adalah 1.
# oss2.resumable_upload(bucket, '<yourObjectName>', '<yourLocalFile>',
# store=oss2.ResumableStore(root='/tmp'),
# # Tentukan bahwa unggah multi-bagian digunakan ketika ukuran file lebih besar atau sama dengan nilai parameter opsional multipart_threshold. Nilai defaultnya adalah 10 MB.
# multipart_threshold=100*1024,
# # Atur ukuran bagian dalam byte. Nilainya harus berada dalam rentang 100 KB hingga 5 GB. Nilai defaultnya adalah 100 KB.
# part_size=100*1024,
# # Atur fungsi callback kemajuan unggah.
# progress_callback=percentage,
# # Jika Anda menggunakan num_threads untuk mengatur jumlah utas unggah bersamaan, atur oss2.defaults.connection_pool_size ke nilai yang lebih besar atau sama dengan jumlah utas unggah bersamaan. Jumlah default utas unggah bersamaan adalah 1.
# num_threads=4)Referensi
Untuk kode sampel lengkap untuk unggah yang dapat dilanjutkan, lihat contoh GitHub.