阿里云 OSS 增量上传脚本。
逻辑很简单,递归遍历本地目录,然后判断每个文件在 OSS 里是否存在,如果不存在则直接上传,如果存在则检查 Content-Md5 是否相等,如果不相等则表明该文件内容已经发生变化,则上传该文件,OSS 会自动覆盖同名文件。
值得注意的是检查 Content-Md5 的值是用的 HTTP 的 HEAD 方法,因为我们只需要 header 中的 Content-Md5 字段的值,所以并不需要使用 GET 方法拿到响应体,这样既加快了速度也节省了 OSS 流量。遍历是单个线程在进行遍历,然后将遍历到的文件上传任务放进了线程池,因为上传任务为 I/O 密集型,故使用多线程上传,采用 Python 指定的默认线程数。源代码如下:
max_workers = (os.cpu_count() or 1) * 5
关于 ossDomain 的值,你如果在同地域内网的 ECS 上使用该脚本,建议使用内网域名,速度快并且节省了流量费用,否则使用外网域名。
环境要求: Python 3.2 +
使用方法:
下载 incremental_upload_to_aliyun_oss.py
将你的 OSS 配置信息替换掉 oss_config.json 中的模版配置,并将以上两个文件放置于同一目录下即可运行。
python3 incremental_upload_to_aliyun_oss.py
如有建议,敬请指出。