七牛云图床链接失效和购买域名

七牛云图床链接失效和购买域名

起因

图床的设置是网上的找的设置,用的七牛云,工具是web端的极简图床,当时记录的博客如下。

https://zhangjiejun.com/posts/picture_storage_for_blog_in_hexo/

现在发现当时配置的图片链接使用的是七牛云提供的测试域名,由于并没有详细了解七牛云的配置,当初只是照着教程下一步做的。测试域名名义毕竟是测试用的,因此有一天会失效就不奇怪了。

七牛云给我发过邮件,我后来忘记处理了。给现在造成了不少的麻烦。

下面来谈解决办法。

图床问题

解决方法分为两个,继续用七牛云和换其他的对象存储。

继续使用七牛云

继续用很简单,使用一个备案过的域名代替测试域名写入七牛云域名管理的配置中就可以了。

之后再将博客中用脚本将链接替换一下,不过极简图床就比较麻烦了,不过好在只有40几张图片,我是非强迫症患者,直接无视就好了。

域名的问题,以及备案的问题,应该会比较麻烦,但是现在整个环境都是不备案会更麻烦,所以很难受>_<

但是备案不仅麻烦,好像使用github pages是没有服务器的,无法备案。。。

专用其他的图床

第一步当然是将图片从七牛云中下载下来,失去链接的图片是无法下载的,因此需要使用七牛云提供的工具来恢复我们的图片。

在网上搜了一下,找到几个人的博客。暂时还未亲自尝试。


补上下载图片的过程

我用的是使用工具qrsctl的命令下载单个图片,并使用脚本批量下载。

七牛云的批量下载好像要收费,因此就选择了这个方法。

先从官方网站获取图片的id,进入你的对象存储内容管理页面,直接将网页html源码复制下来。方法是f12打开检查页面,然后右键Copy - Copy element。之后新建一个html文件,用文本编辑器(notepad++)打开,粘贴

搜索span class=”edit-word ng-binding”

你会发现你的图片id在一个span标签内部。后续就可以使用脚本提取这个id。

之后要下载七牛云的qrsctl 工具。链接https://developer.qiniu.com/kodo/tools/1300/qrsctl/

为了脚本方便,把qrsctl.exe 和html文件放在一个data文件夹,而data文件夹在项目的根目录下

我用的eclipse新建的项目,所以data文件夹和src文件夹同级,都在根目录下。

qrsctl.exe 的使用:

首先要登录,一个小时之后失效

1
2
cd C:\Users\admin\workspace\test\data
qrsctl.exe login example@163.com password

之后先用命令查看你的buckets名字

在使用命令下载图片

1
2
3
qrsctl buckets
qrsctl.exe get yourbucketsname 18-1-15/11111111.jpg ./11111111.jpg
qrsctl.exe get yourbucketsname 18-1-15/11111111.jpg ./18-1-15/1/11111111.jpg 会报错

注意,我使用了极简图床,会在上传图片的时候自动建立对应日期的文件夹,因此下载要写两段名字。但是之后的保存路径qrsctl并不会为你创建不存在的路径,也就是说,我的data文件夹中没有18-1-15的文件夹后面的路径要是写./18-1-15/11111111.jpg就会报错20: The system cannot find the path specified.

很麻烦只能在脚本里处理一下了。

脚本如下,一个java类 然后在main类里面调用下dlimg函数即可

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class getimage {
public String content;
public String bucket = "youtbucketsname";
public List<String> imgId;
public String getHtml() {

File file = new File("data\\html.html");
InputStream input = null;
try {
input = new FileInputStream(file);

} catch (FileNotFoundException e) {
e.printStackTrace();
}
StringBuffer buffer = new StringBuffer();
byte[] bytes = new byte[1024];
try {
for(int n ; (n = input.read(bytes))!=-1 ; ){
buffer.append(new String(bytes,0,n,"GBK"));
}
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
public void getIdList() {
content = getHtml();
String regex = "edit-word ng-binding\">(.*?)</span";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
imgId = new ArrayList<String>();
int count = 0;
while(matcher.find()) {
if(count % 2 == 0) //打印会发现,一半过滤出来的不是图片名称,而是图片类型
imgId.add(matcher.group(1));
count++;//其实不过滤也没事,因为会组成无效的命令而已,不耽误正常下载
}
System.out.println(imgId);
}
public void dlimg() {
getIdList();
File file = new File("data");
Runtime rt = Runtime.getRuntime();
for(int i = 0;i < imgId.size(); i ++) {
String name = imgId.get(i).split("/")[1];
String cmd = file.getAbsolutePath()+"\\qrsctl.exe"+" get youtbucketsname "+imgId.get(i)+" "+file.getAbsolutePath()+"\\"+name; //注意空格和转义
try {
rt.exec(cmd);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

然后发现图片就整整齐齐的放在你的data文件夹里面。

折腾完这些已经好久了,好像很麻烦的样子,这里给出其他人的解决方案

七牛测试域名回收迁移博客图床到腾讯云

还有用C++写脚本的大神,都给你写好了,应该是直接可用的。

解决七牛云链接失效以及批量下载图片并迁移阿里云 OSS

java脚本有点蠢。。。以后试试python或者go或者c++,不用java写脚本了。


下一步自然就是选择新的图床了,备选的有imgur,阿里云OSS,嗯一个国外一个国内。

选择恐惧症吧,

首先要长久安全, 当然我也可以选择定期备份,七牛云这事可不要再发生第二次了,博客里面的链接修改真的是太可怕(虽然可以脚本)。

其次要速度快,我用中文写的博客,自然主要给国人看,那么国内的访问速度还是很重要的。如果以后流量大了,性能的问题,可能还需升级。

最后就是收费的问题。

显然,这个方法要先从七牛云下载图片,然后回到最开始的没有图床的状态,再重新选择一个图床,重新设置并使用,也是非常麻烦,很难受。

只怪当时选择了一个看似很简单的图床,心碎了。

综上,还是阿里云的oss吧。


阿里云使用

首先,阿里云是收费的,花多少钱呢?又到了选择的时候了。(请见最后的更新)

域名

因为图床的问题就考虑买一个自己的域名。

发现zhangjiejun.com可以购买,就在namesilo上购买了一年的。现在学乖了,稍微尝试一下,不好用就换。

当然namesilo上购买域名网上也有很多教程。比如

https://go2think.com/namesilo-tutorial/

https://amosannn.github.io/2017/06/01/github-blog-binding-domain/

购买之后直接将namesevers改成dnspod的,就是腾讯云。

其他的在腾讯云上来配置。

百度腾讯云,进入,注册,实名,点击域名管理。

然后配置三个解析,两个A类型的,主机记录写@, 记录值分别是(我写了前两个)ip地址见链接

https://help.github.com/articles/setting-up-an-apex-domain/

  • 185.199.108.153
  • 185.199.109.153
  • 185.199.110.153
  • 185.199.111.153

一个CNAME类型的,主机记录写www, 记录值写域名就是XXXXX.com就好了。

睡觉等一天就能用了。

在hexo的source文件夹下面新建一个CNAME的文件,然后用文本编辑器打开写入你的域名XXXXXX.com上传即可。

记得在github 仓库的setting页面的custom domain 里面设置一下 enforce https

收工。

目前没有图床一切都用文字描述了,图床的问题过段时间在解决。


更新 2019年4月8日

图床换了阿里云。
详细使用方法参见网上其他博客或者阿里云网站上的说明。
这里只做简单介绍。
首先先建一个bucket,当然要花钱的,我这里花了9块钱买了一年。
然后将图片都传上去,使用web的控制台也行,使用oss brower也可以。
当然ossbrower的使用方法也不多做介绍,在控制台设置access key登陆上就可以了。
20190408104346

最后最麻烦的就是替换md文件中原有的图片链接了。极简图床自动生成的图片链接带一个日期的二级目录。也就是说不同时间上传的图片链接前缀不一样。又要写脚本???算了一共就20多张图片,手动替换了。

所以一个图床拖了半年我也是醉了。

遗留问题

上传图片还是麻烦,比如我是用微信截图,然后下载到本地,然后上传到阿里云。这中间下载,重命名,换格式,如果不是截图可能还需要图片压缩。然后再打开阿里云,进入 oss的控制器,上传,最后复制链接到md中。想想这一系列操作,浑身难受。
极简图床的阿里云配置待续。。。