文档首页/ 对象存储服务 OBS/ SDK参考/ Python/ 对象相关接口(Python SDK)/ 上传对象-获取上传进度(Python SDK)
更新时间:2024-06-19 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
from obs import ObsClient
import os
import traceback

# 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险
# 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/intl/zh-cn/usermanual-ca/ca_01_0003.html
ak = os.getenv("AccessKeyID")
sk = os.getenv("SecretAccessKey")
# 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取
security_token = os.getenv("SecurityToken")
# server填写Bucket对应的Endpoint, 这里以中国-香港为例,其他地区请按实际情况填写。
server = "https://obs.ap-southeast-1.myhuaweicloud.com" 
# 创建obsClient实例
# 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值
obsClient = 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:
    bucketName = "examplebucket"
    # 对象名,即上传后的文件名
    objectKey = "objectname"
    # 待上传文件/文件夹的完整路径,如aa/bb.txt,或aa/
    file_path = 'localfile'
    # 文件上传
    resp = obsClient.putFile(bucketName, objectKey, file_path, progressCallback=callback)
    # 返回码为2xx时,接口调用成功,否则接口调用失败
    if resp.status < 300:
        print('Put File Succeeded')
        print('requestId:', resp.requestId)
        print('etag:', resp.body.etag)
        print('versionId:', resp.body.versionId)
        print('storageClass:', resp.body.storageClass)
    else:
        print('Put File Failed')
        print('requestId:', resp.requestId)
        print('errorCode:', resp.errorCode)
        print('errorMessage:', resp.errorMessage)
except:
    print('Put File Failed')
    print(traceback.format_exc())

支持获取上传进度的接口包括:流式上传、文件上传、上传段、追加上传和断点续传上传。