1 迁移原因

七牛云测试域名回收,导致博客里的图片全都看不了了,打开对应的图片链接会显示:{"error":"no such domain"}

测试域名指的是你的存储空间建立完成后会有的以clouddn. com结尾的域名,这个域名以前是可以一直使用的,但是现在每个测试域名每日限总流量 10GB,而且自创建起 30 个自然日后系统会自动回收,仅供测试使用。我的测试域名已经被回收了,所以博客图片全都也没了。具体公告见这里

解决方法有两个,一种是把测试域名换成自己本网站的域名,比如我的域名huanyouchen.github.io,但是这种方法需要备案,备案更加麻烦。。。另一种方法是把七牛云里的图片迁移到别的图床上,然后更换本站图片的链接到对应图床上,这样更简单点,本文记录下把图片从七牛云迁移到腾讯云的过程。

2 过程思路

首先需要把图片从七牛云里面移出来,如果是在该网站存储空间的内容管理下操作,通过获取图片外部链接再下载下来,这个是行不通的,一方面网站图片可能非常多,另外由于该测试域名被回收,在预览和复制外链时候根本没有反应。

好在七牛云提供了命令行工具qshell,使用qshell来下载,具体过程如下。

2.1 博客图片从七牛云下载到本地

qshell使用方法介绍:命令行工具qshell

2.1.1

我原来的存储空间(名字是huanyouchen)已经被回收,需要新建一个存储空间(命名为backup),这个新存储空间backup有30天可用的测试域名:pnhfj36jj.bkt.clouddn.com(这个域名每个人的都不一样),利用qshell把旧空间中的图片拷贝到新空间banckup中。 具体步骤如下:

  • 下载qshell,下载地址

  • 添加权限,根据自己系统选择相应qshell版本,我的是Ubuntu 18.04,64位系统,

    1
    2
    3
    sudo chmod +x qshell_linux_x64
    ln -s qshell_linux_x64 qshell
  • 设置秘钥:

1
./qshell account 你的AccessKey 你的SecretKey 你的name(幻悠尘)

AccessKey 和 SecretKey可以通过七牛云的个人面板-》秘钥管理中查看, name是你的账户名字,这个可以通过命令./qshell user ls来查看

  • 把旧空间里的文件迁移到新空间:
1
2
3
4
5
6
#获取空间huanyouchen里面的所有文件列表,并保存到文件list.txt中:
./qshell listbucket -o huanyouchen(你的旧空间名字) list.txt
# 切割出文件名
cat list.txt | awk -F '\t' '{print $1}' > list_final.txt
# 将旧空间中的文件批量复制到新空间,在复制的过程中,给文件进行重命名。
./qshell batchcopy --force huanyouchen(你的旧空间名字) backup(你的新空间名字) list_final.txt

如果这个过程出错的话可以查看listbucket的参考文档和batchcopy的参考文档

2.1.2

这个操作完成后,就可以在七牛云的backup空间中看到存储过的网站图片了,下面把这些图片利用qshell提供的qdownload命令把新空间backup中的图片下载到本地。

查看qdownload的参考文档, 注意到:该功能默认需要计费,如果希望享受10G的免费流量,请自行设置cdn_domain参数,如不设置,需支付源站流量费用,无法减免。

因此,首先在当前目录下(qshell所在目录)新建qdownload 功能需要的配置文件batch_download.conf,在配置文件中设置cdn_domain这个参数。 过程如下

1
2
3
4
5
6
# 新建配置文件
touch batch_download.conf
# 新建本地保存图片文件夹,路径可以自己设定
mkdir /home/hyc/下载/qiniu_qshell/img_backup
# 编辑配置文件
gedit batch_download.conf

配置文件的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
{
"dest_dir" : "/home/hyc/下载/qiniu_qshell/img_backup",
"bucket" : "backup",
"prefix" : "",
"suffixes" : "",
"cdn_domain" : "http://pnhfj36jj.bkt.clouddn.com",
"referer" : "",
"log_file" : "download.log",
"log_level" : "info",
"log_rotate" : 1,
"log_stdout" : false
}

其中dest_dir是新建的本地保存图片文件夹,bucket是新的存储空间名字,cdn_domain是新存储空间banckup对外访问域名,这个可以在backup存储空间的空间概览中看到,以clouddn.com结尾的。(在默认不指定cdn_domain的情况下,会从存储源站下载资源,这部分下载产生的流量会生成存储源站下载流量的计费。)其余参数含义可以看参考文档。

在设置好配置文件后,执行qdownload命令:

1
2
3
4
./qshell qdownload batch_download.conf
# 若网站图片非常多,可以使用-c选项设定下载的并发协程数量(大小必须在1-2000,如果不在这个范围内,默认为5):
# ./qshell qdownload -c 50 batch_download.conf

下载完成后,可以在本地img_backup文件夹中看到博客中的图片,第一步完成。

2.2 从本地上传到腾讯云

登录腾讯云-》对象存储-》创建存储桶,然后把本地img_backup文件夹中的博客图片全都上传到存储桶中,在权限管理中设置存储通访问权限,在基础配置中查看访问域名。

2.3 修改本站文件内容里的图片链接

在本站以前的Markdown文件中,文章内容里的七牛云的图片链接形式为:http://p7u7ikgiw.bkt.clouddn.com/xxxx.png

而腾讯云的图片链接形式为:https://huanyouchen-1252081928.cos.ap-shanghai.myqcloud.com/xxx.png

所以需要把hexo的_post文件夹下所有md格式的文章中的图片链接从七牛云更换为腾讯云的链接形式,

1
2
3
4
# 进入目录
cd /home/hyc/hexo/blog/source/_posts
# 更换链接
sed -i 's#(http://p7u7ikgiw.bkt.clouddn.com#(https://huanyouchen-1252081928.cos.ap-shanghai.myqcloud.com#g' *.md

更换完成后,再用hexo s查看博客内的图片,应该能正常显示了。

若还有不能显示的,可以手动打开相应文章的md文件,用编辑器的替换功能把http://p7u7ikgiw.bkt.clouddn.com全都替换为https://huanyouchen-1252081928.cos.ap-shanghai.myqcloud.com

使用hexo g d部署后,图床迁移完成。