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

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

Comments

No comments yet. Why don’t you start the discussion?

发表评论