GET请求下载Bucket文件到本地
更新时间:2022-12-01
依赖
使用原始API进行访问Bucket,需要自行计算鉴权信息。使用流程:
- 准备 ak/sk
- python3.6及以上环境
- 安装reqeusts包, pip3 install requests
GET请求下载Bucket文件demo
- 永久ak-sk方式
                Python
                
            
            1# copy《基础(必看):鉴权字符串生成》鉴权字符串算法代码
2
3def default_ak_sk():
4    """使用固定的ak-sk方式,即永久性的ak-sk"""
5    access_key = "ak"     # 固定 ak
6    secret_key = "sk"     # 固定 sk
7    download(access_key, secret_key)
8
9
10def download(ak, sk, token=None):
11    """从Bucket中下载文件到本地"""
12    bucket_name = "bucketName"         # 访问的bucket名称
13    object_key = "/aaa.png"             # 在请求url没有参数时,访问的key的名字就是path,注意以 '/'开头
14    region = "bj.bcebos.com"            # bucket所在的区域,不同区域服务域名不同
15    http_method = "GET"                 # 请求的方法类型 GET、PUT、HEAD、POST、DELETE
16    host = f"{bucket_name}.{region}"    # 根据bucket和服务域名组装访问域名,有多种方式,这里只展示一种
17    # 构造访问的header信息,可以根据需要进行额外添加,例如:content-type字段
18    header = {
19        "host": host,
20        "x-bce-date": get_x_bce_date()
21    }
22    # 如果请求在url中有带参数,也要参与鉴权
23    param = {}
24    # 生成鉴权字符串
25    auth_key = generate_bos_auth(object_key, ak, sk, http_method, header, param)
26    # 构建完整的访问url
27    request_url = f"http://{host}{object_key}?{AUTHORIZATION}={auth_key}"
28    print(request_url)
29    # 如果有token参数则添加到header中
30    if token is not None:
31        header['x-bce-security-token'] = token
32    # GET请求
33    resp = requests.get(url=request_url, headers=header)
34    # 本地保存文件路径
35    local_path = "/路径/文件名"
36    save_local(resp, local_path)
37
38
39if __name__ == '__main__':
40    # 固定ak-sk方式下载文件
41    default_ak_sk()- 临时sts ak-sk-token方式
 获取sts ak-sk-token
                Python
                
            
            1# copy《基础(必看):鉴权字符串生成》鉴权字符串算法代码
2
3def sts_ak_sk():
4    """使用临时ak-sk-token方式"""
5    access_key = "8702e0c7f08211ec8168058160a92b86"      # 临时申请的 sts ak
6    secret_key = "315fddebae1f4d65b561a296c5fbc2f3"      # 临时申请的 sts sk
7    # 临时sts token信息示例,请替换为自行申请的ak/sk/token
8    token = "ZjkyZmQ2YmQxZTQ3NDcyNjk0ZTg1ZjYyYjlkZjNjODB8AAAAAJMCAACg8ipvvc5Ox8EFDupU5wGhWMBSjmRlbOexzgTxXUZHf+ZFUEWBFiDGGsLxoRG8FnEdmON/7tRwpmHk0mf9cnCwE7pzD1ovRASiLt7FfguU57A42Pk99QjTSxjkdzKF/Oo9wad3r757UC6p2evxb7vem8kHpQBx4yCt7hwoXhWrKNOAlCiD1s0JEa3/e6hRtiiV0Jntn1C4eT9nJm8EwFa4I2Q4nkSrIs21+IkbMdkpyedCwUZcYBAohHaa69U9CQvgc1i9CnFRE6MdMyXFectg7Fm7SUOpM0lVIu/TSGY7quCKFNkWZHdXm4Y1xBNj0vPyoaD5M6PhpfCegp394KnfxrLzJTq04pjuFLECZlbwzTR26jWLy/mWwrXFFIPO68NaqVlYsc8yNnu3xctAMD8bqrnyZ5P4Ph0/R0SDvZl6drQ6rcVB55D6CT1ZuNsU3aD6dFWucDTTJJQhLBfL7tBh7kg11zdPV4Z3b3QPAb4fs8O269M1ihh6ABoincn8WJSraExuC7DUi0J5pIS84yNR"
9    download(access_key, secret_key, token)
10
11
12def download(ak, sk, token=None):
13    """从Bucket中下载文件到本地"""
14    bucket_name = "bucketName"         # 访问的bucket名称
15    object_key = "/aaa.png"             # 在请求url没有参数时,访问的key的名字就是path,注意以 '/'开头
16    region = "bj.bcebos.com"            # bucket所在的区域,不同区域服务域名不同
17    http_method = "GET"                 # 请求的方法类型 GET、PUT、HEAD、POST、DELETE
18    host = f"{bucket_name}.{region}"    # 根据bucket和服务域名组装访问域名,有多种方式,这里只展示一种
19    # 构造访问的header信息,可以根据需要进行额外添加,例如:content-type字段
20    header = {
21        "host": host,
22        "x-bce-date": get_x_bce_date()
23    }
24    # 如果请求在url中有带参数,也要参与鉴权
25    param = {}
26    # 生成鉴权字符串
27    auth_key = generate_bos_auth(object_key, ak, sk, http_method, header, param)
28    # 构建完整的访问url
29    request_url = f"http://{host}{object_key}?{AUTHORIZATION}={auth_key}"
30    # 如果有token参数则添加到header中
31    if token is not None:
32        header['x-bce-security-token'] = token
33    # GET请求
34    resp = requests.get(url=request_url, headers=header)
35    # 本地保存文件路径
36    local_path = "/路径/文件名"
37    save_local(resp, local_path)
38
39
40if __name__ == '__main__':
41    # 临时ak-sk方式下载文件
42    sts_ak_sk()临时ak-sk-token和永久ak-sk生成鉴权auth_key没有区别,只是在header头信息中需要添加x-bce-security-token参数等于申请的token,将以上示例中完整代码保存到单个py文件即可执行。
