起因

一直使用七牛作博客的图床,虽然https要收费,但是好在速度够快以及免费流量够用,没考虑过更换。然而我忽略了给定的测试域名是有30天的限制的。有一天我突然打开博客,woc,我的图片怎么全挂了。所以我现在需要把所有的上传的文件下载到本地,然后换一个图床。虽然七牛可以继续新建存储空间,再享受30天的免费,可是考虑到要频繁更换博客里所有文章的图床地址也是一个浩大的工程,便作罢。而直接升级到正式域名需要购买域名……我自然是没那个钱钱的。

困难

当我准备下载原来存储的图片的时候,woc,七牛太恶心了,测试域名到期了都不能下载。走投无路之际我突然找到了七牛提供的命令行工具qshell,想必它可以帮到我。

拯救图片

我们的思路是这样。为了下载我们的内容,需要一个新的测试域名,那么必不可少的需要一个新的存储空间。所以,我们要新建一个存储空间,使用qshell将文件迁移过去。

下载qshell

qshell 可以在这里选择对应的操作系统下载。我下载的是Linux-amd64的2.4.0版本。建议将可执行文件改名为qshell。方便后续操作。在linux下,解压好文件并修改文件名,cd到文件目录,使用./qshell [参数]即可使用qshell。其他操作系统以及一些可能存在的诸如权限等细节问题都在上面的链接里有解决方案。以下的全部操作都可以参考上面链接所给出的文档。

登录

在七牛的个人中心里,找到密钥管理,找到AK和SK,记下来。接着在命令行使用

1
qshell account AK SK name

即可登录。其中name是你的用户名。

找到所有文件

在命令行使用

1
./qshell listbucket 你的存储空间名字 -o 保存在本地的文件名

即可将你存储空间的所有文件的文件名保存在你指定的文件里,即-o 后的参数,例如

1
./qshell listbucket my_space -o all_files.txt

请注意,这里保存的内容对一个文件来说是一场串,你可以打开看看。一个文件占用一行,里面不仅包含了文件名,还有诸如文件大小之类的我们所不需要的信息。

清洗数据

我们写一个简单的Python脚本,剔除不需要的信息。

注意第一行要改成你存放的all_files.txt的位置。

1
2
3
4
5
6
7
8
9
10
11
filename = '刚刚存放的文件路径名'
res = ""
with open(filename, 'r') as f:
line = f.readline()
while line:
res += line.split()[0]
res += '\n'
line = f.readline()
with open(filename, 'w') as f:
f.write(res)

现在,这个文件包含的就是全部的,数据空间里的文件名,一行一行分割。

创建新空间

和第一次创建空间一样,创建一个新存储空间,记录它的名字。

迁移数据到新空间

命令行使用

1
qshell batchcopy 旧空间名 新空间名 -i 刚刚记录所有文件名的文件路径

例如

1
qshell batchcopy my_space new_space -i files.txt

期间会让你输入验证码,直接照着输入就可以了。

这样子,你的数据就放到新空间里了。

下载到本地

将数据从新空间下载到本地。

你需要在qshell的同目录下,新建一个配置文件,即一个空白文件,命名为qshell.conf 你可以用任何你喜欢的名字。

然后在那个文件里,输入

1
2
3
4
5
{
"dest_dir" : "下载到本地的路径",
"bucket" : "新存储空间的名字",
"cdn_domain" : "新存储空间的测试域名"
}

之后在命令行输入

1
qshell qdownload -c 10 配置文件的路径

OK!大功告成!

新的大陆

那我们的图片需要放到哪里呢?踏上诺亚方舟,在这里找到使用jsDelivr的答案!