从建站之初,为有效节省服务器带宽、提升页面加载速度,本站所有图片均托管于图床。一路走来,历经无数次探索与尝试,前后共迁移了两次图床。起初,微博图床凭借其出色的稳定性和便捷性,成为了理想之选。但好景不长,微博图床开启防盗链机制,尽管后来通过反代等技术手段勉强解决了防盗链问题,可图片加载速度却大不如前,严重影响了用户体验。
那段时间,我对市面上各种免费图床进行了全面测试(付费图床因成本过高,暂不考虑),却发现结果都不尽人意。例如,路过图床因服务器位于海外,在国内访问速度较慢,且稳定性欠佳;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 引用资源了。通过 jsDelivr 引用的方式是:https://cdn.jsdelivr.net/gh/你的用户名/你的仓库名/文件路径
。
然后,我直接在 VSCode 中打开了导出的 SQL 文件,使用 Ctrl + H
组合键进行批量替换。首先,我将阿里图床的域名前缀替换为了通过 jsDelivr 引用的新的前缀。如果你熟悉 SQL 也可以直接使用 SQL 语句来进行替换。替换完成后,我重新导入了 SQL 文件到数据库,从而成功完成了图床的更换。
注意:完成图床更换后,你需要重新检查一下 WordPress 主题设置中的信息是否需要调整,以免因为更换图床而出现一些问题。
{{se}} {{se}} {{se}}
遇见你很高兴
(=・ω・=)
说什么好呢……