Gitee图床无法访问新增防盗链

gitee图床问题

​ 之前一直使用gitee作为图床使用,但是2022年初gitee增加了仓库的防盗链,最近仓库无法作为md文档的外链使用,之前在里面存了许多图片,现在都用不了了,一下子挂掉突然的。

​ 我们通过直接访问存储在Gitee上的图片时,Http请求头没有Referer字段,所以被Gitee服务器当作黑名单而拒绝响应。而前面我们通过Gitee Page部署的Hexo博客请求时,由于代码都托管在Gitee上,在加载所有图片的时候都附加了Referer字段指向Gitee,相当于被Gitee服务器看作白名单因而可以访问。

解决方案

​ 购买oss服务,使用阿里云的oss作为图床。阿里云的价格还比较便宜一年9块,40G存储空间。但这是存储的费用,之后还有流量计费,但听说也比较便宜。

image-20220518201442984

​ 买了空间之后创建一个bucket,然后在阿里云控制台的accessKey管理中增加一个oss的key,作为图床上传的凭证。

image-20220518201658215

配置picGO

image-20220518201743498

将创建的AccessKey和Secret以及存储区域填入

迁移图片

首先将gitee仓库的图片批量下载再上传到oss服务器中,之后要做的就是将md文件的引用链接进行更改。

image-20220518201909088

在md中,图片的插入格式是src,所以进本上ctrl+f然后replaceAll就可以。但是文件多了就不好手动替换了,用几行python解决问题。

def modify_md_content(top):
    for root, dirs, files in os.walk(top, topdown=False):
        for file_name in files:
            file_name_split = file_name.split('.')
            try:
                if file_name_split[-1] == 'md':
                    # 找到md文件
                    md_file_path = os.path.join(root, '.'.join(file_name_split))

                    # 打开md文件然后进行替换
                    with open(md_file_path, 'r', encoding='utf8') as fr:
                        readlines = fr.readlines()
                    fr.close()
                    with open(md_file_path, 'w', encoding='utf8') as f:
                        for line in readlines:
                            line_new = re.sub('#oldsrc', '#newsrc', line)
                            f.writelines(line_new)
                    f.close()
                    print(f'{md_file_path} done...')
                    
            except FileNotFoundError as e:
                print(e)
        # time.sleep(0.5)

在用的时候设置top为根目录就可以把所有的md全扫一次,问题解决。

最后想说

​ 这次有点突然,我也是在写md发现之前的图片加载不出来,才发现gitee不让这么做了。所以说白嫖的还是不稳定啊,还是得正经花钱买服务。

更多推荐