前言#
因为网站带宽不行,使用了阿里云的 oss 定向存储,不过由于证书问题,资源绑定的域名皆为阿里云默认域名oss-accelerate.aliyuncs.com。后来因为 ssl 证书更容易申请了,便想着更新下网站的文件存储 URL,例如现在的 file.yotroy.cool。但已知 halo 后台附件地址无法修改,所以结合自己掌握的一点 java 基础,试着解决这个问题。
h2 控制台的使用#
参考 halo 官方文档Halo 配置文件的详细介绍及参考
打开 halo 配置文件application.yaml
h2:
console:
settings:
web-allow-others: true
path: /h2-console
enabled: true
将web-allow-others
和enabled
设置为true
,重启服务。
网址后缀➕/h2-console
进入控制台,输入application.yaml
中username
和password
。
在SQL statement
输入SELECT * FROM ATTACHMENTS
并运行。
即可获得网站所有附件数据库信息。
思路#
使用java的split字符串分割方法截取字符串然后打印其配对。
这里需要用到THUMB_PATH
、PATH
、ID
三列数据。
我们直接复制需要更改的表格粘贴到 Excel 然后截取这三项到 Word 中,仅粘贴文本获得自动换行的文本,注意不要搞混了顺序要每行正确对应。然后使用替换功能把换行回车替换成其他字符例如;
。
tips: 换行可使用特殊字符^p
表示。使得每条数据仅用;
进行分割。
然后运行以下 java 即可更新所有附件,记得先备份防止窜数据。
java 主程序#
Database.java#
public class Database {
public static void main(String[] args) {
//newStr 替换后的THUMB_PATH数据
//newPStr 替换后的PATH数据
String newTPStr = "TPurl1;TPurl2";
String newPStr = "Purl1;Purl2";
String idStr = "1;2";
String newTPArr[] = newTPStr.split(";");
String newPArr[] = newPStr.split(";");
String idArr[] = idStr.split(";");
if (newPArr.length == idArr.length && newTPArr.length == idArr.length) {
//e.g. UPDATE TEST SET NAME='Hi' WHERE ID=1;
for (int i = 0; i < idArr.length; i++) {
System.out.println("UPDATE ATTACHMENTS SET THUMB_PATH ='" + newTPArr[i] +"' WHERE ID=" +idArr[i] + ";");
}
for (int i = 0; i < idArr.length; i++) {
System.out.println("UPDATE ATTACHMENTS SET PATH ='" + newPArr[i] +"' WHERE ID=" +idArr[i] + ";");
}
}
else {
System.out.println("length error");
}
}
}
输出#
评价#
在对字符串的处理方面仍有待提高,如果能跳过 Excel 到 Word 再到字符替换编辑则效率更高。曾有意直接调用 Excel 数据但由于 Excel 版本等问题报错了,所以仍需努力。
应用新 URL#
由于此操作仅仅是更新了附件数据库的数据,并没有更新其应用(如文章中该附件的引用还是原 url),这里可以直接通过 halo 后台面板直接修改。也可通过 halo 数据导出替换修改后导入数据(过于繁琐),也可直接于 H2 Console 中修改