问题描述

自己博客的图片放在七牛云上存储,当时感觉七牛云免费,而且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导出打不开,我自己手动的导出的。