七牛云图床外链失效之解决办法

简述

前段时间发现博客中的图片外链全都失效了,原因是使用的七牛云的测试域名被收回,然而打开控制平台发现图片无法直接下载,参考网上的博客成功找回,于是便记录下来。

具体找回步骤

下载小工具

首先需要下载七牛云提供的一个小工具 qrsctl,我下载的是 windows版本,链接中包含教程和具体的用法。

下载完成后的文件名为:qrsctl-v3.2.20170501,最好放在一个新建的文件夹中操作。

登录

下载完成后,需要登录。打开cmd,进入到指定的文件夹即 qrsctl 工具存放的文件夹,输入如下命令

1
qrsctl-v3.2.20170501 login <七牛云账号> <七牛云密码>

查看Buckets

登录之后输入如下命令查看所有的 Buckets

1
qrsctl-v3.2.20170501 buckets

image

我这里只有一个存放图片的 Buckets 名为: pictures

查看所有图片

查看该 pictures 下面的所有图片,注意替换 Buckets 名称

1
qrsctl-v3.2.20170501 listprefix pictures ""

image

下载图片

通过以下命令可下载图片,注意替换 Buckets 和图片名称

1
qrsctl-v3.2.20170501 get pictures path.png path.png

image
执行完成后,该图片就会下载到当前文件夹中,当然也可以指定存放文件的路径。

批量下载

由于图片上百张,一张一张下载图片太麻烦,因此用 Java 写了个小程序批量下载。实现代码如下:

实现代码(Java)
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
public class RecoverPictures {
public static void main(String[] args) {
recover();
}
public static void recover() {
String listPic = "qrsctl-v3.2.20170501 listprefix pictures \"\" "; //注意 pictures 是 buckets名称
String downloadPic = "qrsctl-v3.2.20170501 get pictures ";
String picPath = "D:\\Tools\\picc"; //存放图片的目录
Runtime runtime = Runtime.getRuntime();
int i = 0;
try {
String[] command = {"cmd", "/c", listPic};
Process process = runtime.exec(command, null, new File("D:\\Tools")); //在指定的目录下执行命令
InputStream in = process.getInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader buffer = new BufferedReader(isr);
String line = null;
while( (line = buffer.readLine()) != null ) {
if("marker: ".equals(line)) {continue;} //第一行去除
i++;
System.out.println(line);
//循环下载每张图片至指定的文件夹
String downloadCmd = downloadPic + line + " " + picPath + "\\" + line; //下载图片命令
String[] command2 = {"cmd", "/c", downloadCmd};
runtime.exec(command2, null, new File("D:\\Tools"));
//休眠 1s, 防止程序执行过快丢失图片
Thread.sleep(1000);
}
System.out.println("共下载图片总数:" + i );
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

image

程序执行完成后,发现实际下载的图片数量不对,缺失了几张,仔细检查后发现:有的图片文件名中带有空格,导致下载失败。
解决办法:文件名添加双引号!
如下:

1
qrsctl-v3.2.20170501 get pictures "parallel old.png" "parallel old.png"