前言
經過幾個小伙伴的提醒,發現個人博客中的許多圖片都裂了無法訪問;原因就不多說,既然出現問題就得要解決。
原本我的處理方式非常簡單粗暴:找到原有的圖片重新下載下來上傳到新的可用圖床再把圖片地址替換。
這樣搞了一兩篇之后我就絕望了。。。
之前為了代碼能在公眾號里也有好的閱讀體驗,所以能截圖的我絕不貼代碼,導致一篇文章多的得有十幾張圖片。
好在哪位大佬說過“以人肉XX為恥”,這種重復勞動力完全可自動化;於是便有了本次的這個工具。
它可以一行命令把你所有 Markdown
寫的內容中的圖片全部替換為新的圖床。
運行效果如下:
使用
可以直接在這個地址下載 jar 包運行:https://github.com/crossoverJie/blog.toolbox/releases/download/v0.0.1/blog.toolbox-0.0.1-SNAPSHOT.jar
當然也可以下載源碼編譯運行:
git clone https://github.com/crossoverJie/blog.toolbox
mvn clean package
java -jar nows-0.0.1-SNAPSHOT.jar --app.downLoad.path=/xx/img /xx/xx/path 100
看運行方式也知道,其實就是用 SpringBoot
寫了一個工具用於批量下載文中出現的圖片同時上傳后完成替換。
- 其中
app.downLoad.path
是用於將下載的圖片保存到本地磁盤的目錄。 /xx/xx/path
則是掃描.md
文件的目錄,會遞歸掃描所有出所有文件。- 100 則是需要替換文件的數量,默認是按照文件修改時間排序。
如果自己的圖片較多的話還是有幾個坑需要注意下。
線程數量
默認是啟動了兩個線程去遍歷文件、上傳下載圖片、更新文本等內容,其中的網絡 IO 其實挺耗時的,所以其實可以適當的多開些線程來提高任務的執行效率。
但線程過多也許會觸發圖床的保護機制,同時也和自己電腦配置有關,這個得結合實際情況考慮了。
所以可以通過 --app.thread=6
這樣的參數來調整線程數量。
圖床限制
這個是圖片過多一定是大概率出現的,上傳請求的頻次過高很容易被限流封 IP。
{"code":"error","msg":"Upload file count limit. Time left 1027 second."}
目前來看是封 IP 居多,所以可以通過走代理、換網絡的方式來解決。
當然如果是自搭圖床可以無視。
重試
由於我使用的是免費圖床,上傳過程中偶爾也會出現上傳失敗的情況,因此默認是有 5 次重試機制的;如果五次都失敗了那么大概率是 IP 被封了。
即便是 ip 被封后只要換了新的 ip 重新執行程序它會自動過濾掉已經替換的圖片,不會再做無用功,這點可以放心。
圖片保存
默認情況下,下載的圖片會保存在本地,我也建議借此機會自己本地都緩存一份,同時名字還和文中的名字一樣,避免今后圖床徹底掛掉后連恢復的機會都沒有。
總結
這個程序的代碼就沒怎么講了,確實也挺簡單,感興趣的可以自己下來看看。
目前功能也很單一,自用完全夠了;看后續大家是否還有其他需求再逐漸完善吧,比如:
- 圖床上傳失敗自動切換到可用圖床。
- 整體處理效率提升。
- 任務執行過程中更好的進度展現等。
再次貼一下源碼地址:
https://github.com/crossoverJie/blog.toolbox
你的點贊與分享是對我最大的支持