问题描述
自己博客的图片放在七牛云上存储,当时感觉七牛云免费,而且vscode 还有插件很方便在markdownd上插入图片。后来才发现免费的这个对象存储域名是测试域名,过一段时间会被回收(具体几个月我没去看,大概两三个月),回收前会发一个邮件给你,但是当时我没注意到。一直到图片链接失效才发现。 最尴尬的是失效的图片在七牛云那里没有下载的按钮,经过查询找到方法,七牛云官网也有一些文档,就是用他们的一个软件下载。
方法如下:
下载小工具
网址:https://developer.qiniu.com/kodo/tools/1300/qrsctl
首先需要下载七牛云提供的一个小工具 qrsctl,我下载的是 windows版本,链接中包含教程和具体的用法。
下载完成后的文件名为:qrsctl-v3.2.20170501,最好放在一个新建的文件夹中操作。
登录
下载完成后,需要登录。打开cmd,进入到指定的文件夹即 qrsctl-v3.2.20170501 工具存放的文件夹,输入如下命令
qrsctl-v3.2.20170501 login <七牛云账号> <七牛云密码>
查看Buckets
登录之后输入如下命令查看所有的 Buckets
qrsctl-v3.2.20170501 buckets
查看所有图片
查看该 pictures 下面的所有图片,注意替换 Buckets 名称
qrsctl-v3.2.20170501 listprefix pictures ""
下载图片
通过以下命令可下载图片,注意替换 Buckets 和图片名称
qrsctl-v3.2.20170501 get pictures path.png path.png
执行完成后,该图片就会下载到当前文件夹中,当然也可以指定存放文件的路径。
批量下载(推荐)
由于图片上百张,一张一张下载图片太麻烦,因此用 Java 写了个小程序批量下载。实现代码如下:
实现代码(Java):
注意一些地方修改成你自己的
流程:获取文件名—-》读取文件名——》循环下载
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();
}
}
}
程序执行完成后,发现实际下载的图片数量不对,缺失了几张,仔细检查后发现:有的图片文件名中带有空格,导致下载失败。
解决办法:文件名添加双引号! 如下:
qrsctl-v3.2.20170501 get pictures "parallel old.png" "parallel old.png"
还有些特殊格式的java导出打不开,我自己手动的导出的。