Python3 脚本实现又拍云20w图片素材快速迁移

又拍云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完了