前言#
因為網站帶寬不行,使用了阿里雲的 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 中修改