七牛测试域名回收迁移博客图床到腾讯云

七牛图床

最近发现博客里面用的七牛的免费图床全部过期了,之前也收到了七牛发的测试域名回收通知,当时以为域名过期了,再申请续一下就行,结果发现是直接都回收,啥都没有了,心中真是一万头草泥马。
之前工作比较忙也就忘了,最近登录博客一看,图片全部GG了, 博客搭建最近发现博客里面用的七牛的免费图床全部过期了,所以周末在家花时间就折腾了下迁移方案,记录一下.

方案调研

其实最初写博客的初衷也只是为了记录写自己日常工作中学到的一些东西,方便日后查阅。另外一个其实也有赠人玫瑰的想法,记录下工作中碰到的一些棘手的问题,方便同行交流。所以其实访问量不大,对图片的需求也不大,但是有时候博客里有必须得放一两张图。
所以最初在网上调研的时候,基本是看有哪些免费好用的图用的图床,当时看七牛的评价挺好的,一个月有10G的免费流量,一般人根本用不到那么多,而且方案也比较成熟,各种工具啥的都有,就用七牛了。所以现在不让用了,就调研了下其他的方案,网上有推荐其他免费图床的,反正我是真不敢用了。还有一些推荐阿里OSS的,不过据说收费比较复杂,用之前先好好研究下收费公式,因为我只有腾讯的vps,所以就只关注了腾讯的方案,腾讯和阿里OSS对应的服务叫COS,并且收费方式也很良心,大家可以去这里看下:定价对象存储 COS
COS计费规则截图
所以看这个图,基本上你可以不用花钱,流量肯定够你用了.

图片备份

这里有个很坑的地方就是,如果你的测试域名过期,你上传到七牛云的文件你是没办法直接访问的,你会发现点击预览和下载都是没有反,你会发现点击预览和下载都是没有反应的,这是因为你上传生成的域名链接已经被回收了,是无法通过网页URL来访问的,只能通过其他接口来操作,主要有下面几个步骤:

新建存储空间

之前那个存储空间里面上传的文件已经没有办法访问了,但是可以创建一个新的存储空间,通过其他接口把文件都转移到新的存储空间,这样就可以访问那些失效的文件了,比如可以建一个新的存储空间叫backup

下载开发工具

命令行工具(qshell),这个工具提供了很多接口,下载下来解压就能直接用,根据的操作系统选择对应的就行,详细的可以看下载界面的链接,如果只用一次,也不用去设置什么环境变量了,直接开始搞

1
2
3
4
5
6
7
8
9
10
11
# 我的是mac,所以用的是下面这个,具体的取决于你的系统
sudo chmod +x qshell-darwin-x64
ln -s qshell-darwin-x64 qshell
# AK/SK 需要去 个人中心->密钥管理 看下你自己的
./qshell account <AK> <SK>
# 把过期存储空间所有文件列表保存到文件
./qshell listbucket <old存储空间> list.txt
# 切割出文件名
cat list.txt | awk -F '\t' '{print $1}' > list_final.txt
# 把过期的文件列表搬迁到新的存储空间,我这里会出现让输入一个确认字符串,照着输入就行
./qshell batchcopy <old存储空间> backup list_final.txt

然后就可以在网页上的新的存储空间看到之前那些无法查看的文件了.

批量下载到本地

qshell提供了qdownload可以批量下载文件,不过官网给出的api文档特别标注了,这个接口默认是要收费的:配置【该功能默认需要计费,如果希望享受10G的免费流量,请自行设置cdn_domain参数,如不设置,需支付源站流量费用,无法减免!!!】,先看下用法:

1
qshell qdownload [<ThreadCount>] <LocalDownloadConfig>

第一个下载线程数参数是个可选参数,可以不用管,主要是需要写个配置文件,并且记住,得配置下cdn_domain这个参数,新建一个配置文件batch_download.conf:

1
2
3
4
5
6
7
8
9
10
11
12
{
"dest_dir" : "/xxx/xxx/Downloads/qiniu",
"bucket" : "backup",
"prefix" : "",
"suffixes" : "",
"cdn_domain" : "http://pgiolcvny.bkt.clouddn.com",
"referer" : "",
"log_file" : "download.log",
"log_level" : "info",
"log_rotate" : 1,
"log_stdout" : false
}

备注:cdn_domain这个就是你的backup这个存储空间的对外访问域名,每个参数的具体含义及使用事项在这里可以看到qdownload参数解释,配置好之后就可以执行:

1
./qshell qdownload batch_download.conf

终端中就可以看到日志,然后在dest_dir中就可以看到你要下载的文件了。

上传到腾讯COS

我们把所有的文件下载下来之后,然后还需要把文件上传到COS,这样图片才可以作为资源被外部访问,如果你之前没有使用过对象存储服务,还需要先创建一个存储桶,记住权限要设置成对外可读(不然别人也访问不了),然后把这些文件上传到这个存储桶里边,这个在网页上就可以直接操作,可以批量把刚才下载的都上传了。

批量替换

然后就只剩一步了,我们现在可以通过腾讯的COS来作为我们的图床服务,所以如果你写的新的博客,可以直接用新的地址,但是你之前写的那些博客,都是七牛的域名,所以需要把博客的原始文件里面的图片链接全部替换成腾讯COS的域名,老的域名可以看你的博客文件,我的是:http://7xn9y9.com1.z0.glb.clouddn.com,然后新的域名可以直接在腾讯云控制台,点开一张你上传过的图片查看,我的是:https://blog-1254094716.cos.ap-chengdu.myqcloud.com.具体的文件名因为都是一样的编码方式,所以只用替换域名就行,这里可以用sed命令来批量操作:

1
2
3
4
5
6
7
8
cd source/_post

# Linux用户
sed -i 's#(http://7xn9y9.com1.z0.glb.clouddn.com#(https://blog-1254094716.cos.ap-chengdu.myqcloud.com#g' *.md

# Mac用户
sed -i -e 's#(http://7xn9y9.com1.z0.glb.clouddn.com#(https://blog-1254094716.cos.ap-chengdu.myqcloud.com#g' *.md
rm *.md-e

NOTE:之所以替换的链接带上(是为了防止误伤,比如这边文章里就有七牛的域名链接地址,但是图片链接在MarkDown写法里都是放在括号里的,所以记得这么替换就行。

然后你可以去访问下你的博客,找一篇有图的,应该是可以访问的。