PUT请求上传文件到Bucket
更新时间:2022-12-01
依赖
使用原始API进行访问Bucket,需要自行计算鉴权信息。使用流程:
- 准备 ak/sk
- python3.6及以上环境
- 安装reqeusts包,
pip3 install requests
PUT请求上传文件到Bucket Demo
- 永久ak-sk方式
# copy《基础(必看):鉴权字符串生成》鉴权字符串算法代码
def default_ak_sk():
"""使用固定的ak-sk方式,即永久性的ak-sk"""
access_key = "ak" # 固定 ak
secret_key = "sk" # 固定 sk
upload(access_key, secret_key)
def upload(ak, sk, token=None):
"""上传文件"""
bucket_name = "bucketName"
object_key = "/aaabbb.png" # object_key即上传后保存的名称,注意以 '/'开头
region = "bj.bcebos.com" # bucket所在的区域,不同区域服务域名不同
http_method = "PUT" # 请求的方法类型 GET、PUT、HEAD、POST、DELETE
host = f"{bucket_name}.{region}" # 根据bucket和服务域名组装访问域名
# 构造访问的header信息,可以根据需要进行额外添加,例如:content-type字段
header = {
"host": host,
"x-bce-date": get_x_bce_date()
}
# 如果请求在url中有带参数,也要参与鉴权
param = {}
# 生成鉴权字符串
auth_key = generate_bos_auth(object_key, ak, sk, http_method, header, param)
# 构建完整的访问url
request_url = f"http://{host}{object_key}?{AUTHORIZATION}={auth_key}"
# 如果有token参数则添加到header中
if token is not None:
header['x-bce-security-token'] = token
# 将文件读取为二进制流
local_path = "/本地路径/文件名"
with open(local_path, "rb") as f:
# 发起put上传请求
resp = requests.put(url=request_url, headers=header, data=f)
print(resp)
if __name__ == '__main__':
# 固定ak-sk方式上传文件
default_ak_sk()
- 临时sts ak-sk-token方式
获取sts ak-sk-token
# copy《基础(必看):鉴权字符串生成》鉴权字符串算法代码
def sts_ak_sk():
"""使用临时ak-sk-token方式"""
access_key = "8702e0c7f08211ec8168058160a92b86" # 临时申请的 sts ak
secret_key = "315fddebae1f4d65b561a296c5fbc2f3" # 临时申请的 sts sk
# 临时sts token信息示例,请替换为自行申请的ak/sk/token
token = "ZjkyZmQ2YmQxZTQ3NDcyNjk0ZTg1ZjYyYjlkZjNjODB8AAAAAJMCAACg8ipvvc5Ox8EFDupU5wGhWMBSjmRlbOexzgTxXUZHf+ZFUEWBFiDGGsLxoRG8FnEdmON/7tRwpmHk0mf9cnCwE7pzD1ovRASiLt7FfguU57A42Pk99QjTSxjkdzKF/Oo9wad3r757UC6p2evxb7vem8kHpQBx4yCt7hwoXhWrKNOAlCiD1s0JEa3/e6hRtiiV0Jntn1C4eT9nJm8EwFa4I2Q4nkSrIs21+IkbMdkpyedCwUZcYBAohHaa69U9CQvgc1i9CnFRE6MdMyXFectg7Fm7SUOpM0lVIu/TSGY7quCKFNkWZHdXm4Y1xBNj0vPyoaD5M6PhpfCegp394KnfxrLzJTq04pjuFLECZlbwzTR26jWLy/mWwrXFFIPO68NaqVlYsc8yNnu3xctAMD8bqrnyZ5P4Ph0/R0SDvZl6drQ6rcVB55D6CT1ZuNsU3aD6dFWucDTTJJQhLBfL7tBh7kg11zdPV4Z3b3QPAb4fs8O269M1ihh6ABoincn8WJSraExuC7DUi0J5pIS84yNR"
upload(access_key, secret_key, token)
def upload(ak, sk, token=None):
"""上传文件"""
bucket_name = "bucketName"
object_key = "/aaabbb.png" # object_key即上传后保存的名称,注意以 '/'开头
region = "bj.bcebos.com" # bucket所在的区域,不同区域服务域名不同
http_method = "PUT" # 请求的方法类型 GET、PUT、HEAD、POST、DELETE
host = f"{bucket_name}.{region}" # 根据bucket和服务域名组装访问域名
# 构造访问的header信息,可以根据需要进行额外添加,例如:content-type字段
header = {
"host": host,
"x-bce-date": get_x_bce_date()
}
# 如果请求在url中有带参数,也要参与鉴权
param = {}
# 生成鉴权字符串
auth_key = generate_bos_auth(object_key, ak, sk, http_method, header, param)
# 构建完整的访问url
request_url = f"http://{host}{object_key}?{AUTHORIZATION}={auth_key}"
# 如果有token参数则添加到header中
if token is not None:
header['x-bce-security-token'] = token
# 将文件读取为二进制流
local_path = "/本地路径/文件名"
with open(local_path, "rb") as f:
# 发起put上传请求
resp = requests.put(url=request_url, headers=header, data=f)
print(resp)
if __name__ == '__main__':
# 临时ak-sk方式上传文件
sts_ak_sk()
临时ak-sk-token和永久ak-sk生成鉴权auth_key没有区别,只是在header头信息中需要添加x-bce-security-token
参数等于申请的token,将以上示例中完整代码保存到单个py文件即可执行。
注意:
- 将以上示例中完整代码保存到单个py文件即可执行。
- 请求响应200即表示文件上传成功,也可以在控制台查看是否有相关文件