腾讯云 COS 对象存储上传脚本

COS 对象存储工具概览 官方提供了多种同步工具。

  • COS Browser 工具:通过可视化界面,方便地进行数据的上传、下载等操作。

也可以利用 SDK 自己编写上传脚本。

# -*- 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
import os

# 腾讯云COSV5Python SDK, 目前可以支持Python2.6与Python2.7以及Python3.x

# pip安装指南:pip install -U cos-python-sdk-v5

# cos最新可用地域,参照https://www.qcloud.com/document/product/436/6224

logging.basicConfig(level=logging.INFO, stream=sys.stdout)

# 设置用户属性, 包括secret_id, secret_key, region
# appid已在配置中移除,请在参数Bucket中带上appid。Bucket由bucketname-appid组成
secret_id = 'secret_id' # 替换为用户的secret_id
secret_key = 'secret_key' # 替换为用户的secret_key
region = 'ap-beijing' # 替换为用户的region
token = None # 使用临时秘钥需要传入Token,默认为空,可不填
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
client = CosS3Client(config)

def upload(key, name):
# 高级上传接口(推荐)
response = client.upload_file(
Bucket='cosbj-1251669885',
LocalFilePath=name,
Key=key,
PartSize=10,
MAXThread=10
)
print(response['ETag'] + "\n")


def gci(filepath):
#遍历filepath下所有文件,包括子目录 #
files = os.listdir(filepath)
for fi in files:
fi_d = os.path.join(filepath,fi)
if os.path.isdir(fi_d):
dirr = os.path.join(filepath, fi_d)[len(os.getcwd())+1:] + "/"
gci(fi_d)
#返回目录名,切片删除os.getcwd()
else:
name = os.path.join(filepath,fi_d)[len(os.getcwd())+1:]
key = name.replace("\\","/")
#替换win路径\为/
print(key)
upload(key, name)
#返回文件名,切片删除os.getcwd()



filepath = os.getcwd() #获取当前目录
gci(filepath)

可以实现遍历当前目录下所有文件(包括文件夹),逐一上传。

两个遇到的坑:

  1. windows 下路径为\,需要 .replace(“\“,”/“) 替换 \ 为 /。上传 test/123.txt ,COS会自动生成 test 文件夹,并上传123.txt至其中。

  2. os.getcwd() 获取当前目录上传会自动上传本脚本文件,暴露了脚本中有secret_id、secret_key,懒得做文件判断上传了,在 COS 控制台将该脚本文件设置为私有读写。

评论