前言
因为网站带宽不行,使用了阿里云的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 中修改