早前訂閱了一個圖片上傳工具 iPic
,單單就圖片上傳這一功能來講它無疑是很是優秀的。無奈我有的時候要上傳一些非圖片小文件,雖然這個只是個小功能,一個小小的腳本就能夠作到,可是想一想用到這個功能的時候還要打開terminal
,emmmm…(縱然本人身爲程序員terminal
一直不會關)。git
而後某一天看到了七牛的SDK有命令行工具 qshell (七牛雲有免費對象存儲空間),而 macOS 的 Automator
又是支持運行 shell
腳本的,再加上早前利用 Automator
作過一項彩色圖轉灰度圖的功能,知道這些功能是能夠作成系統服務的…...我有一個大膽的想法。程序員
打開 Automator
選擇服務github
而後選擇 運行 Shell 腳本
拖拽到右邊,程序能夠選 finder
或者 任何應用程序
shell
shell
類型務必選擇 /bin/bash
!即便你安裝了 zsh
也不要用!瀏覽器
以前在服務器上安裝了zsh
,結果PM2
部署項目死活不成功,找了一圈也沒答案,大概沒有我這麼無聊的人,把服務器配置成zsh
?
這裏咱們先查閱一下 qshell
上傳文件的文檔和使用示例:bash
# 上傳本地文件/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
這裏須要解釋的幾個點:dom
pbcopy
命令會把 echo
中的內容放置到系統粘貼板中;urlencode
:在上傳測試過程當中,發現一旦選擇的文件列表中含有中文命名的文件,就會致使文件連接構造異常,最後也到不了系統粘貼板中,具體緣由不明,因此在構造連接時作一次編碼就好,反正瀏覽器自己也會對編碼的連接自行識別;if [ -f $f ]
是爲了判斷文件與文件夾;echo
的兩個參數能夠參考該文;寫完腳本以後能夠運行測試,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美滋滋?。