All Products
Search
Document Center

Object Storage Service:Pembatasan bandwidth koneksi tunggal (Python SDK V1)

Last Updated:Nov 29, 2025

Topik ini menjelaskan cara menambahkan parameter dalam permintaan unggah atau unduh objek untuk mengatur batas bandwidth unggah atau unduh, sehingga memastikan tersedianya bandwidth yang cukup bagi aplikasi lain.

Catatan penggunaan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.

  • Kredensial akses pada topik ini diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses menggunakan OSS SDK untuk Python 1.0.

  • Instans OSSClient pada topik ini dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Inisialisasi.

Konfigurasikan pembatasan bandwidth koneksi tunggal untuk unggah dan unduh sederhana

Kode contoh berikut menunjukkan cara mengonfigurasi pembatasan bandwidth koneksi tunggal untuk unggah dan unduh sederhana:

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import OSS_TRAFFIC_LIMIT

# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, 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 yang sesuai dengan titik akhir, misalnya cn-hangzhou. Catatan: Parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"

# Atur nama bucket menjadi examplebucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
object_name = 'exampledir/exampleobject.txt'
# Tentukan path lengkap file lokal yang akan diunggah. Contoh: D:\\localpath\\examplefile.txt. Jika path lokal tidak ditentukan, file diunggah dari direktori program contoh.
local_file_name = 'D:\\localpath\\examplefile.txt'
# Tentukan path lengkap tujuan unduhan objek. Jika file lokal yang ditentukan sudah ada, file tersebut akan ditimpa. Jika belum ada, file tersebut akan dibuat.
# Jika path lokal tidak ditentukan, file yang diunduh akan disimpan ke direktori program contoh.
down_file_name = 'D:\\localpath\\exampleobject.txt'

# Atur kecepatan pembatasan menjadi 100 KB/detik (819.200 bit/detik) dalam header.
limit_speed = (100 * 1024 * 8)
headers = dict()
headers[OSS_TRAFFIC_LIMIT] = str(limit_speed)

# Kendalikan aliran unggah file.
result = bucket.put_object_from_file(object_name, local_file_name, headers=headers)
print('http response status:', result.status)

# Kendalikan aliran unduh file ke mesin lokal Anda.
result = bucket.get_object_to_file(object_name, down_file_name, headers=headers)
print('http response status:', result.status)

Kendalikan aliran unggah multi-bagian

Kode berikut menunjukkan cara mengendalikan aliran unggah multi-bagian:

# -*- coding: utf-8 -*-
import os
from oss2 import SizedFileAdapter, determine_part_size
from oss2.headers import OSS_TRAFFIC_LIMIT
from oss2.models import PartInfo
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, 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 yang sesuai dengan titik akhir, misalnya cn-hangzhou. Catatan: Parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"

# Atur nama bucket menjadi examplebucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
key = 'exampledir/exampleobject.txt'
# Tentukan path lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt.
filename = 'D:\\localpath\\examplefile.txt'

total_size = os.path.getsize(filename)
# Metode determine_part_size digunakan untuk menentukan ukuran bagian.
part_size = determine_part_size(total_size, preferred_size=100 * 1024)

# Inisialisasi unggah multi-bagian.
upload_id = bucket.init_multipart_upload(key).upload_id
parts = []

# Atur kecepatan pembatasan menjadi 100 KB/detik (819.200 bit/detik) dalam header.
limit_speed = (100 * 1024 * 8)
headers = dict()
headers[OSS_TRAFFIC_LIMIT] = str(limit_speed)

# Unggah bagian satu per satu.
with open(filename, 'rb') as fileobj:
    part_number = 1
    offset = 0
    while offset < total_size:
        num_to_upload = min(part_size, total_size - offset)
        # Gunakan SizedFileAdapter untuk membungkus objek file agar hanya data bagian saat ini yang diunggah.
        result = bucket.upload_part(key, upload_id, part_number,
                                    SizedFileAdapter(fileobj, num_to_upload), headers=headers)
        parts.append(PartInfo(part_number, result.etag))

        offset += num_to_upload
        part_number += 1

# Selesaikan unggah multi-bagian.
# Untuk mengatur header saat menyelesaikan unggah multi-bagian, lihat kode contoh berikut.
headers = dict()
# Atur daftar kontrol akses (ACL) untuk objek. Pada contoh ini, ACL diatur ke OBJECT_ACL_PRIVATE, yang menentukan izin privat.
# headers["x-oss-object-acl"] = oss2.OBJECT_ACL_PRIVATE
bucket.complete_multipart_upload(key, upload_id, parts, headers=headers)
# bucket.complete_multipart_upload(key, upload_id, parts)

# Verifikasi unggah multi-bagian.
with open(filename, 'rb') as fileobj:
    assert bucket.get_object(key).read() == fileobj.read()

Konfigurasikan pembatasan bandwidth untuk unggah dan unduh yang menggunakan URL yang ditandatangani

Kode berikut menunjukkan cara mengendalikan aliran unggah dan unduh file yang menggunakan URL yang ditandatangani:

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import OSS_TRAFFIC_LIMIT

# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, 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 yang sesuai dengan titik akhir, misalnya cn-hangzhou. Catatan: Parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"

# Atur nama bucket menjadi examplebucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
object_name = 'exampledir/exampleobject.txt'
# Tentukan path lengkap file lokal yang akan diunggah. Contoh: D:\\localpath\\examplefile.txt. Jika path lokal tidak ditentukan, file diunggah dari direktori program contoh.
local_file_name = 'D:\\localpath\\examplefile.txt'
# Tentukan path lengkap tujuan unduhan objek. Jika file lokal yang ditentukan sudah ada, file tersebut akan ditimpa. Jika belum ada, file tersebut akan dibuat.
# Jika path lokal tidak ditentukan, file yang diunduh akan disimpan ke direktori program contoh.
down_file_name = 'D:\\localpath\\exampleobject.txt'

# Atur kecepatan pembatasan menjadi 100 KB/detik (819.200 bit/detik) dalam params.
limit_speed = (100 * 1024 * 8)
params = dict()
params[OSS_TRAFFIC_LIMIT] = str(limit_speed)

# Buat URL yang ditandatangani untuk unggah terkendali. URL berlaku selama 60 detik.
url = bucket.sign_url('PUT', object_name, 60, params=params)
print('put object url:', url)

# Kendalikan aliran unggah.
result = bucket.put_object_with_url_from_file(url, local_file_name)
print('http response status:', result.status)

# Buat URL yang ditandatangani untuk unduh terkendali. URL berlaku selama 60 detik.
url = bucket.sign_url('GET', object_name, 60, params=params)
print('get object url:', url)

# Kendalikan aliran unduh.
result = bucket.get_object_with_url_to_file(url, down_file_name)
print('http response status:', result.status)

Referensi

Untuk kode contoh lengkap mengenai pembatasan bandwidth koneksi tunggal, lihat contoh GitHub.