來源
早前訂閱了一個圖片上傳工具 iPic
,單單就圖片上傳這一功能來說它無疑是非常優秀的。無奈我有的時候要上傳一些非圖片小文件,雖然這個只是個小功能,一個小小的腳本就可以做到,但是想想用到這個功能的時候還要打開terminal
,emmmm…(縱然本人身爲程序員terminal
一直不會關)。
然後某一天看到了七牛的SDK有命令行工具 qshell (七牛雲有免費對象存儲空間),而 macOS 的 Automator
又是支持運行 shell
腳本的,再加上早前利用 Automator
做過一項彩色圖轉灰度圖的功能,知道這些功能是可以做成系統服務的…...我有一個大膽的想法。
實踐想法
打開 Automator
選擇服務
然後選擇 運行 Shell 腳本
拖拽到右邊,程序可以選 finder
或者 任何應用程序
shell
類型務必選擇 /bin/bash
!即使你安裝了 zsh
也不要用!
之前在服務器上安裝了zsh
,結果PM2
部署項目死活不成功,找了一圈也沒答案,大概沒有我這麼無聊的人,把服務器配置成zsh
?
code
這裏我們先查閱一下 qshell
上傳文件的文檔和使用示例:
# 上傳本地文件/Users/jemy/Documents/qiniu.jpg到空間if-pbl裏面
$ qshell fput if-pbl qiniu.jpg /Users/jemy/Documents/qiniu.jpg
這裏主要是對 Key
的構造,即上傳文件在七牛存儲中的文件名,我選擇的構造規則是[日期]-[時間戳MD5值]-[文件名],可以有效規避文件名重複的問題,完整代碼如下:
urlencode() {
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf "$c" | xxd -p -c1 | while read x;do printf "%%%s" "$x";done
esac
done
}
for f in "$@"
do
if [ -f $f ]; then
Key=$(date +%F)-$(date +%s | md5 | head -c 8)-$(basename $f)
/usr/local/bin/qshell fput static "$Key" $f
link="//static.domain.me/$(urlencode $Key)"
if [ "$links" == "" ]; then
links=$link
else
links=$links"\n"$link
fi
fi
done
echo -ne $links | pbcopy
這裏需要解釋的幾個點:
-
pbcopy
命令會把echo
中的內容放置到系統粘貼板中; - 關於
urlencode
:在上傳測試過程中,發現一旦選擇的文件列表中含有中文命名的文件,就會導致文件鏈接構造異常,最後也到不了系統粘貼板中,具體原因不明,所以在構造鏈接時做一次編碼就好,反正瀏覽器本身也會對編碼的鏈接自行識別; -
if [ -f $f ]
是爲了判斷文件與文件夾; - 考慮到MD5值太長,我只截取了8位;
-
echo
的兩個參數可以參考該文; - 請把資源鏈接的域名改成你對應的。
test
寫完腳本之後可以運行測試,Automator
界面右上角有一個運行,在運行之前我們先模擬選中了一些文件。
添加文件:
測試的時候請把 /usr/local/bin/qshell fput static "$Key" $f
刪除。
運行成功之後粘貼板中應該會有如下內容:
//static.domain.me/2017-10-16-9f26b83d-img2%e7%9a%84%e5%89%af%e6%9c%ac.jpg
//static.domain.me/2017-10-16-9f26b83d-image.png
到這裏,只剩下下載安裝 qshell
就大功告成:
$ mv ~/Downloads/qshell /usr/local/bin
$ chmod 755 /usr/local/bin/qshell
$ qshell account AccessKey SecretKey
這裏還用到了修改權限命令,有興趣的話可以查看我另一篇文章服務器搭建—Linux基礎知識。
完結
現在你可以剛纔測試時添加的 finder
去掉,命名並保存,就可以像這樣使用:
下面可以完善一下上傳結束後的通知:
除此之外,你還可以在系統設置中爲該服務添加快捷鍵,好了,我去取消訂閱 iPic
了......
還有值得一提的是,七牛的對象存儲免費額度還挺大的,拿來做私家圖牀還是很不錯的,我還配置了CDN美滋滋?。