七牛云数据迁移
# 准备工作
# 新账号准备工作
# 开启密钥
个人中心->密钥管理->创建密钥
# 迁移脚本
from qiniu import Auth
from qiniu import BucketManager
from qiniu import Auth, PersistentFop, urlsafe_base64_encode
import datetime
#access_key,secret_key在个人面板的密钥管理处获得,非个人账号密码
src_access_key = "wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf"
src_secret_key = "wxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxg"
src_bucket_name = 'birenchong'
src_q = Auth(src_access_key, src_secret_key)
src_bucket = BucketManager(src_q)
access_key = "7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxI"
secret_key = "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxR"
bucket_name = 'birenchong'
q = Auth(access_key, secret_key)
bucket = BucketManager(q)
# 抓取镜像源文件到空间
def sync_mirror(key, bucket, bucket_name):
bucket = bucket
# 要拉取的文件名
key = key
ret, info = bucket.prefetch(bucket_name, key)
# print(info)
return info
# assert ret['key'] == key
# 列出文件
def file_items(marker, bucket, bucket_name):
bucket = bucket
# 前缀
prefix = None
# prefix = "image"
# 列举条目
limit = 1000
# 列举出除'/'的所有文件以及以'/'为分隔的所有前缀
delimiter = None
# 标记
# marker = None
marker = marker
ret, eof, info = bucket.list(bucket_name, prefix, marker, limit, delimiter)
# assert len(ret.get('items')) is not None
a = {"ret": ret, "eof": eof}
return a
def select_flie(key, bucket, bucket_name):
#获取文件的状态信息
ret, info = bucket.stat(bucket_name, key)
return True if ret != None else False
#对已经上传到七牛的图片发起异步缩略操作
def file_compress(key, q, bucket_name):
#要缩略的文件所在的空间和文件名。
# key = key
#pipeline是使用的队列名称,不设置代表不使用私有队列,使用公有队列。
pipeline = "birenchong_queue"
#要进行缩略的操作。
fops = 'imageslim'
#可以对缩略后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当前空间
new_file_name = bucket_name + ":" + key
saveas_key = urlsafe_base64_encode(new_file_name)
fops = fops + '|saveas/' + saveas_key
pfop = PersistentFop(q, bucket_name, pipeline)
ops = []
ops.append(fops)
ret, info = pfop.execute(key, ops, 1)
print(new_file_name, info.status_code)
# assert ret['persistentId'] is not None
if __name__ == "__main__":
marker = None
# marker = "eyJjIjowLCJrxxxxxxxxxxxxxxxxxxxxxxxxTQ0OTE0NzI5MC5qcGcifQ=="
while True:
# for i in range(1,10):
# 列出文件
a = file_items(marker, src_bucket, src_bucket_name)
eof = a.get("eof")
ret = a.get("ret")
marker = ret.get("marker")
# print(marker)
# sum = 0
start = datetime.datetime.now()
for y in ret.get("items"):
# print(y.get("key"))
# 2022-08-09 19:00:00 - 2022-08-09 20:40:00 16600428000000000-16600488000000000
# 判断时间,上次同步时间到本次同步时间
if y.get("putTime") > 16600608000000000:
# 判断文件是否存在
# file_status = select_flie(y.get("key"), bucket, bucket_name)
# if file_status is False:
# print("{}--{}".format(y.get("key"),y.get("putTime")))
# 将文件镜像同步
data = sync_mirror(y.get("key"), bucket, bucket_name)
print("{}--{}".format(marker, data))
if data.status_code == 200:
if y.get("mimeType") == "image/jpeg" or y.get(
"mimeType") == "image/png":
# 压缩
file_compress(y.get("key"), q, bucket_name)
# sum += 1
end = datetime.datetime.now()
# print(sum)
# print(end - start)
if eof == True:
break
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# 迁移方案
# 新账号操作
# 创建存储空间
对象存储->空间管理->新建空间
# 自定义源站域名
qn.birenchong.cn
# aws操作
# aws创建cloudfront
指向qn.birenchong.cn
的cname
# 执行迁移脚本
# 第一次全量
# 后面定时增量
打开并修改时间限制
# 迁移完成后操作
# 检查
在新账号检查文件是否同步
# 后端修改
代码层面修改,拦截转发,修改key
birenchong
access_key = "7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxI"
secret_key = "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxR"
1
2
3
2
3
# 前端修改
各端将birenchong.birenchong.com
替换成qn.birenchong.cn
crm修改php指定的key和空间地址
APP_QINIU_URL=https://qn.birenchong.cn
QINIU_ACCESS_KEY=7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxI
QINIU_SECRET_KEY=2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxR
QINIU_VIDEO_BUCKET_NAME=birenchong
QINIU_VIDEO_CHAT_ROOM_BUCKET_NAME=birenchong
VIDEO_CHAT_ROOM_IMG_BASE_URL=https://qn.birenchong.cn/
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 运维修改(和后端一起)
将原来的存储空间做一个镜像回源
主路线
https://qn.birenchong.cn
1
URL参数:不保留
Last Updated: 2023/11/08, 14:45:54