更新时间:2026-07-01 GMT+08:00

下载对象-获取下载进度(Python SDK)

支持获取下载进度的接口包括:二进制式下载,流式下载、文件下载和断点续传下载。

本示例用于获取下载对象的进度。

示例代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import os
import traceback

from obs import ObsClient

# 推荐通过环境变量获取AK/SK,这里也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险
# 您可以登录访问管理控制台获取访问密钥AK/SK
ak = os.getenv("AccessKeyID")
sk = os.getenv("SecretAccessKey")
# 如需使用临时AK/SK和SecurityToken访问OBS,则同样推荐通过环境变量获取
# security_token = os.getenv("SecurityToken")
# server填写桶所在区域的endpoint
server = "https://your-endpoint"

# 创建obsClient实例
# 如果使用临时AK/SK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值
obs_client = ObsClient(access_key_id=ak, secret_access_key=sk, server=server) 

# 获取下载对象的进度 
def callback(transferredAmount, totalAmount, totalSeconds): 
    # 获取下载平均速率(KB/S) 
    print(transferredAmount * 1.0 / totalSeconds / 1024) 
    # 获取下载进度百分比 
    print(transferredAmount * 100.0 / totalAmount) 

try: 
    bucket_name = "examplebucket" 
    object_key = "objectname" 
    # 下载对象 
    resp = obs_client.getObject(bucket_name=bucket_name, object_key=object_key, progressCallback=callback) 
    # 返回码为2xx时,接口调用成功,否则接口调用失败 
    if resp.status < 300: 
        print('Get Object Succeeded') 
        print('requestId:', resp.requestId) 
        # 读取对象内容 
        while True: 
            chunk = resp.body.response.read(65536) 
            if not chunk: 
                break 
            print(chunk) 
        resp.body.response.close() 
    else: 
        print('Get Object Failed') 
        print('requestId:', resp.requestId) 
        print('errorCode:', resp.errorCode) 
        print('errorMessage:', resp.errorMessage) 
except Exception: 
    print('Get Object Failed') 
    print(traceback.format_exc())