为了节省服务器带宽,提高页面加载速度,本站从建立以来图片都是托管在图床上的,经过大大小小的各种瞎折腾,累计大概迁移了两次图床。第一次是因为微博图床开启了防盗链,不得不说微博图床还是很好用,尽管后来可以用反代的等各种方式解决防盗链,但是速度已经大不如前。在那段时间我试遍了各种免费图床(收费的搞不起),发现速度都差强人意。期间试过了路过图床(不稳定,服务器在海外,国内速度一般)、SM.MS(慢)、ImgURL(限制每日上传次数)、公益图床(限制太多),这些免费图床几乎都有限制或者速度太慢的问题,而且用户的数据很难保证安全。
一次偶然的机会发现了有个阿里图床的存在,其实也不算图床貌似就是利用了阿里客服的一个漏洞,阿里随时都可以和谐,不过有大厂 CDN 的加持还是很快的。不知你发现没有,很多大厂网站都有识图功能,通过此功能上传的图片链接是永久有效的,所以就出现了京东、百度之类的图床,用户使用这些图床数据安全是得不到保障的。
本站从微博图床防盗链后一直使用阿里图床至今,期间多次萌生过更换图床的想法,后因为暂时没问题且更换麻烦都搁置了。最近发现阿里图床很不稳定,部分图片加载不出或出现 429
错误,严重拖慢了整站速度,不得已下定决心更换图床。本次图床使用 Jsdelivr + Github + PicGo ,图片数据全部存储在自己的 GitHub
仓库里不用担心数据安全的问题,配合 jsDelivr 全球 CDN 加速直接起飞~
下载旧图片
更换图床首先要先把旧的图片全部下载下来,由于原先全是用的阿里图床外链,所以我直接把数据库中所有表导出为 sql 文件下载到本地,再使用正则提取的方式获取所有图片链接。得到图片链接后还需要解决下载的问题,目前市面上的主流下载器貌似都没有批量下载超过500个文件功能(后来发现 IDM 可以),这里我自己写了一个简单的 Python 脚本,将所有链接保存在 下载列表.txt
文件内然后执行此脚本即可,能够自动去重下载。
源码如下:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import requests
# 声明全局变量
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
}
down_list = []
# 读取下载列表函数
def open_file(txt):
global down_list
try:
file = open(txt, "r", encoding="utf-8")
temp_lists = file.readlines() # 取出每行作为数组
for i in temp_lists:
down_list.append(i.replace("\n", ""))
print("共获取到" + str(len(down_list)) + "个下载任务!")
except Exception as e:
print(e)
# 下载函数
def download(url, name):
r = requests.get(url, headers=headers, timeout=10)
with open(name, "wb") as code:
code.write(r.content)
# 列表去重函数
def check_list(lists):
temp = []
for i in lists:
if not i in temp:
temp.append(i)
return temp
if __name__ == '__main__':
open_file("下载列表.txt")
final_list = check_list(down_list)
for file_url in final_list:
file_name = file_url.replace("https://ae01.alicdn.com/kf/", "") # 删除url前缀
download(file_url, file_name)
压缩旧图片
图片都下载好了后,发现以前的图片大多都没有压缩,所以还需要再压缩下才能上传,这里我直接用的 色彩笔 在线工具批量压缩,压缩后大小整整小了一倍呢。
上传替换旧图片
把图片都上传到自己的 GitHub 仓库,然后发布一个 releases
,之后就可以通过 jsDelivr 引用资源了,使用方法:https://cdn.jsdelivr.net/gh/你的用户名/你的仓库名/文件路径
。然后直接用 VSCode 打开导出的 sql 文件,Ctrl + H
批量替换阿里图床域名前缀为自己通过 jsDelivr 引用资源的前缀(当然也可以用 SQL 语句替换),再将 sql 文件重新导入数据库就成功的完成图床更换了,注意 WordPress 主题设置那边的信息可能会重置,需要重新设置下。
Comments | 4 条评论
博主 送报少年
博主 忘却
该评论为私密评论
博主 歧途中の光
(=・ω・=)
博主 歧途中の光
说什么好呢……