又拍云access_key_id和secret_access_key获取
这是一个同步又拍云空间图片的 Python 脚本,适用于将大量图片从一个空间同步到另一个空间
今天有个需求,从又拍云空间同步一批图片(20w)至又拍云另一个空间,这两个空间都在同一个账号下,通过 upx下载或者通过 cdn域名下载太慢了,还会产生费用,故而有了下面的 python脚本同步,速度快,且不会产生费用,有需要的朋友,可以根据自己的需要改动
这里使用的 python3,安装就不赘述了
参考文档
access_key_id和secret_access_key获取,如图所示
在存储管理界面-》操作员授权,选择 s3访问凭证,点击查看
python脚本如下
#coding: utf-8 import sys import boto3 from botocore.config import Config endpoint = 'https://s3.api.upyun.com' # 控制台子账号获取 access_key_id = '' secret_access_key = '' #files = sys.argv[1] #files = "1.txt" #src_bucket源存储空间 #dst_bucket目标存储空间 #files 包含 20万图片路径的文件 ''' #文件包含2列内容 shell> cat 1.txt /element_origin_pic/21/06/29/b7d0db81bd9065f8a1a45aada2e3acad.png,/third58ku/art/21/06/29/b7d0db81bd9065f8a1a45aada2e3acad.png /element_origin_pic/21/06/29/13745af7c9baf623272fa15c6cce6c26.png,/third58ku/art/21/06/29/13745af7c9baf623272fa15c6cce6c26.png ''' def s3_clients(): s3 = boto3.client( 's3', aws_access_key_id=access_key_id, aws_secret_access_key=secret_access_key, endpoint_url=endpoint, config=Config(s3={"addressing_style": "virtual", "signature_version": 's3v4'})) #print(s3.list_buckets()) #print(s3.list_buckets().keys()) return s3 def s3_copy(src_bucket,dst_bucket,files): s3 = s3_clients() with open(files,'r') as f: for keys in f: key = keys.strip('\n').split(',') src_key =key[0] #源文件路径 dst_key =key[1] #目标路径 #print(src_key,dst_key) copy_source = { 'Bucket': src_bucket, 'Key': src_key } try: s3.copy(copy_source,dst_bucket,dst_key) print("[%s:%s] => [%s:%s], copy ok" %(src_bucket,src_key,dst_bucket,dst_key)) except Exception as err: print("[%s:%s] => [%s:%s], copy fail: %s" %(src_bucket,src_key,dst_bucket,dst_key,err)) s3_copy(src_bucket,dst_bucket,files)
安装 boto3
pip3 install boto3 #我这里已经安装过了
执行脚本
python3 rsync.py >>rsync.log
执行结果
[src_bucket:/element_origin_pic/21/06/29/b7d0db81bd9065f8a1a45aada2e3acad.png] => [dst_bucket:/third58ku/art/21/06/29/b7d0db81bd9065f8a1a45aada2e3acad.png], copy ok [src_bucket:/element_origin_pic/21/06/29/13745af7c9baf623272fa15c6cce6c26.png] => [dst_bucket:/third58ku/art/21/06/29/13745af7c9baf623272fa15c6cce6c26.png], copy ok
下班后开始跑的,等第二天早上来看,20w图片早已经 copy完了