在Markdown編輯中自動上傳圖片
這幾天學習一些技術,寫一些筆記或者相關的文件,一般喜歡用markdown,因為比較通用,而且寫完直接可以傳到csdn上。不管是用typora編輯,還是在csdn上寫,插入圖片始終是一個極其極其蛋疼的事情,而且csdn的相簿找不著了。後來折騰了半天,也看到了網上的一些解決辦法。後來綜合了一下各類方法以及自己的需求寫了一個java自動化程式。
發現的方法:
首先先說明一下為了方便該問題的解決看到的方法:
1.利用新浪微博上傳,免費!用Chrome有外掛操作。我試用之後,不知道為什麼傳不上去,可能是晚上宿舍網慢。所以放棄。
2.使用各公司開發好的圖床,有幾個G的免費使用,也有相關工具。沒有下載使用,有興趣的同學可以自行鼓搗。
3.GitHub,將圖片上傳到GitHub上,然後右擊獲取圖片地址。
4.iPic,上官網一看介紹,完全符合需求。可以自己選擇圖床,但是隻支援mac……
解決方案
接下來說一下我的辦法吧。我是使用GitHub當成自己的倉庫。首先先建一個資料夾,截圖之後儲存在裡面,程式隔幾秒遍歷一次資料夾,出現新的檔案後上傳GitHub。當然在此之前要在GitHub上新建一個repository專門存放圖片,上傳完畢之後,可發現,在同一repository的圖片路徑只有檔名是不一樣的,大致的結構是這樣的。
https://github.com/{使用者名稱}/{專案名}/{一些其他目錄結構}/{上傳時圖片檔名,經過urlencoude}?raw=true
你可以先傳幾個圖片看看地址構成,然後把檔名字串拼接上,就得到了圖片地址了,然後寫入到一個文件裡,複製那一段地址即可。當然會爬蟲的可以獲取更準確的資訊。
演示:
就好比在編寫這個文件時候,需要截圖。這個時候,先執行程式,然後直接用截圖軟體擷取。
儲存。之後程式檢索到新檔案,開始上傳,並返回結果。
開啟實現準備好的輸出圖片地址文件,
完畢~
程式碼
原始碼可以參看我的GitHub。
這裡簡單講解一下。
14.15.48.63這幾行需要寫你自己的路徑地址,大概是這幾行。picTxt是輸出圖片路徑的結果存到哪裡。path放圖片的地方。48.46是拼接圖片地址。
traverseFolder2(path);// 遍歷目標文件下的檔案。
oldPath.addAll(newPath);
// 兩個陣列,分別存遍歷前後的內容,然後找差別,這裡初始化,兩個一樣。
while (true) {
/*停3秒遍歷一次*/
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*獲取路徑到newPath中*/
getPath();
/*對比oldPath和newPath,將差異路徑存到diff中*/
comparePaths(oldPath, newPath);
if (diff.size() == 0) {
//沒有差異。
continue;
} else {
//發現儲存圖片
System.out.println("準備上傳圖片");
//upload.cmd 放的git的上傳命令。
executive("cmd /c upload.cmd");
System.out.println("上傳結果:");
for (String ds : diff) {
//獲取上傳檔名,urlEncode一下轉碼。
int index = ds.lastIndexOf("\\");
String uploadName = urlEncode(ds.substring(index + 1, ds.length()));
//按照自己的路徑改 System.out.println("https://github.com/zz133110/MarkDownPic/blob/master/" + uploadName + "?raw=true");
// 追加寫入text文字
File f = new File(picTxt);
if (!f.exists()) {
System.out.print("檔案不存在");
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 不存在則建立
}
try {
BufferedWriter output = new BufferedWriter(new FileWriter(f, true));
output.write("https://github.com/zz133110/MarkDownPic/blob/master/" + uploadName + "?raw=true");
output.write("\n");
output.flush();
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//同步old new,clear diff
oldPath.addAll(diff);
diff.clear();
}
大佬的程式碼:
我的程式碼: