又拍云access_key_id和secret_access_key获取
这是一个同步又拍云空间图片的 Python 脚本,适用于将大量图片从一个空间同步到另一个空间
今天有个需求,从又拍云空间同步一批图片(20w)至又拍云另一个空间,这两个空间都在同一个账号下,通过 upx下载或者通过 cdn域名下载太慢了,还会产生费用,故而有了下面的 python脚本同步,速度快,且不会产生费用,有需要的朋友,可以根据自己的需要改动
这里使用的 python3,安装就不赘述了
参考文档
help.upyun.com/knowledge-base/s3-api/
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完了
