PUT请求上传文件到Bucket
更新时间:2022-12-01
依赖
使用原始API进行访问Bucket,需要自行计算鉴权信息。使用流程:
- 准备 ak/sk
- python3.6及以上环境
- 安装reqeusts包,
pip3 install requests
PUT请求上传文件到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 upload(access_key, secret_key)
8
9
10def upload(ak, sk, token=None):
11 """上传文件"""
12 bucket_name = "bucketName"
13 object_key = "/aaabbb.png" # object_key即上传后保存的名称,注意以 '/'开头
14 region = "bj.bcebos.com" # bucket所在的区域,不同区域服务域名不同
15 http_method = "PUT" # 请求的方法类型 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 # 如果有token参数则添加到header中
29 if token is not None:
30 header['x-bce-security-token'] = token
31
32 # 将文件读取为二进制流
33 local_path = "/本地路径/文件名"
34 with open(local_path, "rb") as f:
35 # 发起put上传请求
36 resp = requests.put(url=request_url, headers=header, data=f)
37 print(resp)
38
39
40if __name__ == '__main__':
41 # 固定ak-sk方式上传文件
42 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 upload(access_key, secret_key, token)
10
11
12def upload(ak, sk, token=None):
13 """上传文件"""
14 bucket_name = "bucketName"
15 object_key = "/aaabbb.png" # object_key即上传后保存的名称,注意以 '/'开头
16 region = "bj.bcebos.com" # bucket所在的区域,不同区域服务域名不同
17 http_method = "PUT" # 请求的方法类型 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
34 # 将文件读取为二进制流
35 local_path = "/本地路径/文件名"
36 with open(local_path, "rb") as f:
37 # 发起put上传请求
38 resp = requests.put(url=request_url, headers=header, data=f)
39 print(resp)
40
41
42if __name__ == '__main__':
43 # 临时ak-sk方式上传文件
44 sts_ak_sk()
临时ak-sk-token和永久ak-sk生成鉴权auth_key没有区别,只是在header头信息中需要添加x-bce-security-token
参数等于申请的token,将以上示例中完整代码保存到单个py文件即可执行。
注意:
- 将以上示例中完整代码保存到单个py文件即可执行。
- 请求响应200即表示文件上传成功,也可以在控制台查看是否有相关文件