Python脚本上传文件到腾讯云COS对象存储

python  

安装SDK

pip install -U cos-python-sdk-v5  
  • 显示指定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)  
  • 显示指定存储桶内的对象
# -*- 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)  
  • 显示指定存储桶内的某个目录的对象
# -*- 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)  
  • 上传文件到指定桶的指定目录下
# -*- 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的文件到指定桶的指定目录下分块上传

    简单上传的方式只支持最大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'])