环境 CentOS 7.4
Python 2.7.5
安装准备
安装 pip
pip 是什么
The PyPA recommended tool for installing Python packages.
pip · PyPI
Installation - pip documentation v21.1.2 (pypa.io)
easy_install pip
使用命令python -m pip --version检查pip是否被安装 (上面的安装没生效啊)
[root@dns ~]# python -m pip --version
/usr/bin/python: No module named typing; 'pip' is a package and cannot be directly executed
使用get-pip.py安装
#Python 3
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
#Python 2.7
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
#安装pip
python get-pip.py
#升级pip
python -m pip install -U pip
安装SDK
pip install -U cos-python-sdk-v5
提示如下报错,参见Python 升级 requests 包失败解决
ERROR: Cannot uninstall 'requests'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
Demo 程序
Demo 1: 显示指定Region内的存储桶列表
# -*- coding=utf-8
# appid 已在配置中移除,请在参数 Bucket 中带上 appid。Bucket 由 BucketName-APPID 组成
# 1. 设置用户配置, 包括 secretId,secretKey 以及 Region
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import sys
import logging
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
secret_id = '你自己的secretId' # 替换为用户的 secretId
secret_key = '你自己的secretKey' # 替换为用户的 secretKey
region = 'ap-shanghai' # 替换为用户的 Region
token = None # 使用临时密钥需要传入 Token,默认为空,可不填
scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
# 2. 获取客户端对象
client = CosS3Client(config)
# 参照下文的描述。或者参照 Demo 程序,详见 https://github.com/tencentyun/cos-python-sdk-v5/blob/master/qcloud_cos/demo.py
response = client.list_buckets(
)
print(response)
执行结果
Demo 2: 显示指定存储桶内的对象
# -*- coding=utf-8
# appid 已在配置中移除,请在参数 Bucket 中带上 appid。Bucket 由 BucketName-APPID 组成
# 1. 设置用户配置, 包括 secretId,secretKey 以及 Region
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import sys
import logging
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
secret_id = '你自己的secretId' # 替换为用户的 secretId
secret_key = '你自己的secretKey' # 替换为用户的 secretKey
region = 'ap-shanghai' # 替换为用户的 Region
token = None # 使用临时密钥需要传入 Token,默认为空,可不填
scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
# 2. 获取客户端对象
client = CosS3Client(config)
# 参照下文的描述。或者参照 Demo 程序,详见 https://github.com/tencentyun/cos-python-sdk-v5/blob/master/qcloud_cos/demo.py
response = client.list_objects(
Bucket='backup-1253280931'
)
print(response)
执行结果
[root@bareos_server opt]# python cos_list_objects.py
INFO:qcloud_cos.cos_client:list objects, url=:https://backup-1253280931.cos.ap-shanghai.myqcloud.com/ ,headers=:{}
{'Name': 'backup-1253280931', 'MaxKeys': '1000', 'Prefix': None, 'Marker': None, 'EncodingType': 'url', 'IsTruncated': 'false', 'Contents': [{'LastModified': '2021-05-26T03:06:30.000Z', 'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'StorageClass': 'STANDARD', 'Key': 'DB_backup/', 'Owner': {'DisplayName': '1253280931', 'ID': '1253280931'}, 'Size': '0'}, {'LastModified': '2021-05-26T03:06:57.000Z', 'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'StorageClass': 'STANDARD', 'Key': 'DB_backup/ecommerce_table_fwk_biz_log_backup/', 'Owner': {'DisplayName': '1253280931', 'ID': '1253280931'}, 'Size': '0'}]}
Demo 3: 显示指定存储桶内的某个目录的对象
# -*- coding=utf-8
# appid 已在配置中移除,请在参数 Bucket 中带上 appid。Bucket 由 BucketName-APPID 组成
# 1. 设置用户配置, 包括 secretId,secretKey 以及 Region
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import sys
import logging
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
secret_id = '你自己的secretId' # 替换为用户的 secretId
secret_key = '你自己的secretKey' # 替换为用户的 secretKey
region = 'ap-shanghai' # 替换为用户的 Region
token = None # 使用临时密钥需要传入 Token,默认为空,可不填
scheme = 'https' # 指定使用 http/https 协议来访问 COS,默认为 https,可不填
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token, Scheme=scheme)
# 2. 获取客户端对象
client = CosS3Client(config)
# 参照下文的描述。或者参照 Demo 程序,详见 https://github.com/tencentyun/cos-python-sdk-v5/blob/master/qcloud_cos/demo.py
response = client.list_objects(
Bucket='backup-1253280931',
Prefix='DB_backup/ecommerce_table_fwk_biz_log_backup/'
)
print(response)
执行结果
[root@bareos_server opt]# python cos_list_objects.py
INFO:qcloud_cos.cos_client:list objects, url=:https://backup-1253280931.cos.ap-shanghai.myqcloud.com/ ,headers=:{}
{'Name': 'backup-1253280931', 'MaxKeys': '1000', 'Prefix': 'DB_backup/ecommerce_table_fwk_biz_log_backup/', 'Marker': None, 'EncodingType': 'url', 'IsTruncated': 'false', 'Contents': [{'LastModified': '2021-05-26T03:06:57.000Z', 'ETag': '"d41d8cd98f00b204e9800998ecf8427e"', 'StorageClass': 'STANDARD', 'Key': 'DB_backup/ecommerce_table_fwk_biz_log_backup/', 'Owner': {'DisplayName': '1253280931', 'ID': '1253280931'}, 'Size': '0'}, {'LastModified': '2021-05-26T03:13:18.000Z', 'ETag': '"7a544cfc6e98ddc019aa21e7413ee23b"', 'StorageClass': 'STANDARD', 'Key': 'DB_backup/ecommerce_table_fwk_biz_log_backup/ftptest.pcap', 'Owner': {'DisplayName': '1253280931', 'ID': '1253280931'}, 'Size': '3275'}]}
Demo 4: 上传文件到指定桶的指定目录下
# -*- coding=utf-8
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
from qcloud_cos import CosServiceError
from qcloud_cos import CosClientError
import sys
import logging
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
#logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
# 设置用户属性, 包括 secret_id, secret_key, region
# APPID 已在配置中移除,请在参数 Bucket 中带上 APPID。Bucket 由 BucketName-APPID 组成
secret_id = '我的ID' # 替换为用户的 secret_id
secret_key = '我的KEY' # 替换为用户的 secret_key
region = 'ap-shanghai' # 替换为用户的 region
token = None # 使用临时密钥需要传入 Token,默认为空,可不填
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
client = CosS3Client(config)
#上传由 '/' 分隔的对象名,自动创建包含文件的文件夹。想要在此文件夹中添加新文件时,只需要在上传文件至 COS 时,将 Key 填写为此目录前缀即可。
dir_name = 'DB_backup/ecommerce_table_fwk_biz_log_backup/'
file_name = 'fwk_biz_log_begin_to_20200101.xb'
object_key = dir_name + file_name
with open('/nfs_storage/fwk_biz_log_begin_to_20200101.xb', 'rb') as fp:
response = client.put_object(
Bucket='backup-1253280931', # Bucket 由 BucketName-APPID 组成
Body=fp,
Key=object_key,
EnableMD5=True,
StorageClass='STANDARD',
ContentType='text/html; charset=utf-8'
)
print(response['ETag'])
执行结果: 提示>5G的文件不能上传。小文件是可以的。
Traceback (most recent call last):
File "cos_put_objects.py", line 43, in <module>
ContentType='text/html; charset=utf-8'
File "/usr/lib/python2.7/site-packages/qcloud_cos/cos_client.py", line 327, in put_object
check_object_content_length(Body)
File "/usr/lib/python2.7/site-packages/qcloud_cos/cos_comm.py", line 380, in check_object_content_length
raise CosClientError('The object size you upload can not be larger than 5GB in put_object or upload_part')
qcloud_cos.cos_exception.CosClientError: The object size you upload can not be larger than 5GB in put_object or upload_part
Demo 5: 上传>5G的文件到指定桶的指定目录下
简单上传的方式只支持最大5GB的文件上传,而通过分块上传的方式可上传大于5GB的文件。
这里使用 高级接口(推荐) -- 上传对象(断点续传)
该高级接口根据用户文件的长度自动选择简单上传以及分块上传,对于小于等于20M的文件调用简单上传,对于大于20MB的文件调用分块上传,对于分块上传未完成的文件会自动进行断点续传。
对于分块上传的文件,可以通过 progress_callback 回调函数,获取上传进度。
# -*- coding=utf-8
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
from qcloud_cos import CosServiceError
from qcloud_cos import CosClientError
import sys
import logging
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
#logging.basicConfig(level=logging.DEBUG, stream=sys.stdout)
# 设置用户属性, 包括 secret_id, secret_key, region
# APPID 已在配置中移除,请在参数 Bucket 中带上 APPID。Bucket 由 BucketName-APPID 组成
secret_id = '我的ID' # 替换为用户的 secret_id
secret_key = '我的KEY' # 替换为用户的 secret_key
region = 'ap-shanghai' # 替换为用户的 region
token = None # 使用临时密钥需要传入 Token,默认为空,可不填
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
client = CosS3Client(config)
#上传由 '/' 分隔的对象名,自动创建包含文件的文件夹。想要在此文件夹中添加新文件时,只需要在上传文件至 COS 时,将 Key 填写为此目录前缀即可。
dir_name = 'DB_backup/ecommerce_table_fwk_biz_log_backup/'
file_name = 'fwk_biz_log_begin_to_20200101.xb'
object_key = dir_name + file_name
def upload_percentage(consumed_bytes, total_bytes):
"""进度条回调函数,计算当前上传的百分比
:param consumed_bytes: 已经上传的数据量
:param total_bytes: 总数据量
"""
if total_bytes:
rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
print('\r{0}% '.format(rate))
sys.stdout.flush()
#with open('/nfs_storage/fwk_biz_log_begin_to_20200101.xb', 'rb') as fp:
response = client.upload_file(
Bucket='backup-1253280931', # Bucket 由 BucketName-APPID 组成
Key=object_key,
#LocalFilePath='/nfs_storage/fwk_biz_log_begin_to_20200101.xb',
LocalFilePath='/nfs_storage/fwk_biz_log_begin_to_20200101.xb',
#progress_callback=upload_percentage, #暂时还不能使用,官方答复发布了文档,代码没跟上
#StorageClass='STANDARD'|'STANDARD_IA'|'ARCHIVE',
EnableMD5=True
)
print(response['ETag'])
待有空,将文件改为参数传入