前言

因为网站带宽不行,使用了阿里云的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-othersenabled设置为true,重启服务。
网址后缀➕/h2-console进入控制台,输入application.yamlusernamepassword

SQL statement 输入SELECT * FROM ATTACHMENTS 并运行。

即可获得网站所有附件数据库信息。

思路

使用javasplit字符串分割方法截取字符串然后打印其配对。
这里需要用到THUMB_PATHPATHID三列数据。
我们直接复制需要更改的表格粘贴到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");
		}
	}
}

输出

Database_java

评价

在对字符串的处理方面仍有待提高,如果能跳过Excel到Word再到字符替换编辑则效率更高。曾有意直接调用Excel数据但由于Excel版本等问题报错了,所以仍需努力。

应用新URL

由于此操作仅仅是更新了附件数据库的数据,并没有更新其应用(如文章中该附件的引用还是原url),这里可以直接通过halo后台面板直接修改。也可通过halo数据导出替换修改后导入数据(过于繁琐),也可直接于H2 Console 中修改

h2语法参考

h2_Sample_SQL_Script