Erimus-Koo / qCloud-COS-Sync

腾讯云 COS 上传同步工具
20 stars 4 forks source link

功能

【重要】使用前务必做好备份!做好备份!做好备份!

安装环境

首先,安装官方的SDK。

pip install cos-python-sdk-v5

官方 Python SDK 文档

配置参数

看代码最下端

初始化客户端

在【密钥管理】找到appid和配套的key,填写下面3个值。

appid = 88888888  # your appid
secret_id = 'your_id'
secret_key = 'your_key'

地区列表

可以看自己的bucket下的域名管理/静态地址/cos.后面那段。

region_info = 'ap-shanghai'

填写同步目录

设定本地特定目录为root,对应bucket根目录。还可以指定仅更新某个目录。

bucket 前面appid对应项目下的bucket name。

bucket_name = 'your_bucket_name'

root 本地根目录,对应bucket根目录。我两台电脑,所以适配了win和mac。

if os.name == 'nt':
    root = 'D:/OneDrive/yourRoot'  # PC
else:
    root = '/Users/Erimus/OneDrive/yourRoot'  # MAC

subFolder 仅更新root下指定目录

subFolder = '' #仅更新root下指定目录
subFolder = 'notebook' #无需指定的话直接注释本行

maxAge 可以设置浏览器缓存时间了

    maxAge = 0  # header的缓存过期时间 0为不设置

忽略文件/文件夹

ignoreFiles / ignoreFolders 这两个函数可以自己去设定。
目前默认排除了git相关文件,还有exe、py、psd等等。具体看一下代码就明白了。
默认排除项目见顶部的两个 DEFAULT_IGNORE

ignoreFiless = []  # 忽略的文件结尾字符(扩展名)
ignoreFolders = []  # 需要忽略的文件夹

上述两个列表,接受字符串,也可以直接传入自定义规则的 function。
示例:

def my_rule(fn):
    if os.path.getsize(fn) > 10000000:  # 忽略大文件
        return True
ignoreFiless = ['exe', 'py', my_rule]

ignoreFiles
判断的对象是含完整路径的文件名,如 C:/path/file.ext
传入字符串时,默认识别结尾字符串(扩展名),符合的忽略(不同步)。
传入函数时,以文件名为参数。返回 True 时,忽略该文件(不同步)。

ignoreFolders
判断的对象是相对根目录的完整路径,如/path
传入字符串时,只要上述路径中的某一级等于该字符串,就忽略(不同步)。
传入函数时,以上述路径为参数。返回 True 时,忽略该目录(不同步)。

工作流程

使用示例

配置文件

my_bucket1.py 用来统一配置 bucket 的链接密钥和本地对应目录等。
因为每次初始化会连接,建议不同 bucket 分不同文件。

from qCloud_COS_Sync import COS

my_cos_config = {
    'appid': 888888,
    'secret_id': '',
    'secret_key': '',
    'region_info': 'ap-shanghai',
    'bucket_name': '',
    'maxAge': 0
}

ignore = {'ignoreFiles': [],
          'ignoreFolders': ['python']}

root = _root + '/OneDrive/site'  # PC
# subFolder = 'notebook'  # 无需指定的话 直接注释本行
MY_BUCKET1 = COS(**my_cos_config, root=root, **ignore)  # 初始化

使用场景

my_func.py 直接调用上述配置好的 bucket 连接。
还可以中途修改过滤规则,目录,默认maxAge,等等。

from cos.my_bucket1 import MY_BUCKET1

here = os.path.abspath(os.path.dirname(__file__))
sub_folder = 'test_folder'
file_full_path = os.path.join(here, sub_folder, 'test_file.html')
local_file = file_full_path[len(here):]

# 创建本地测试文件
if not os.path.exists(new:=os.path.join(here, sub_folder)):
    os.mkdir(new)
if not os.path.exists(file_full_path):
    with open(file_full_path, 'w', encoding='utf-8') as f:
        f.write('test file')

def title(x): print('\n' + x.center(30, '='))

title('修改配置')
MY_BUCKET1.config({'root': here})
[print(f'{k}: {v}') for k, v in MY_BUCKET1.cfg.items()]

title('上传')
MY_BUCKET1.upload(local_file)
cos_files = MY_BUCKET1.read(sub_folder)
[print(i) for i in cos_files]

title('删除')
MY_BUCKET1.delete(local_file)
cos_files = MY_BUCKET1.read(sub_folder)
[print(i) for i in cos_files]

title('同步')
MY_BUCKET1.sync(sub_folder)
cos_files = MY_BUCKET1.read(sub_folder)
[print(i) for i in cos_files]

title('删除')
MY_BUCKET1.delete(local_file)
cos_files = MY_BUCKET1.read(sub_folder)
[print(i) for i in cos_files]

腾讯云 COS 同步 网站 静态 Python SDK


Update log