利用七牛 qshell 和 Automator 打造快捷上傳服務

來源

早前訂閱了一個圖片上傳工具 iPic,單單就圖片上傳這一功能來說它無疑是非常優秀的。無奈我有的時候要上傳一些非圖片小文件,雖然這個只是個小功能,一個小小的腳本就可以做到,但是想想用到這個功能的時候還要打開terminal,emmmm…(縱然本人身爲程序員terminal一直不會關)。

然後某一天看到了七牛的SDK有命令行工具 qshell (七牛雲有免費對象存儲空間),而 macOS 的 Automator 又是支持運行 shell 腳本的,再加上早前利用 Automator 做過一項彩色圖轉灰度圖的功能,知道這些功能是可以做成系統服務的…...我有一個大膽的想法。

實踐想法

打開 Automator 選擇服務

service

然後選擇 運行 Shell 腳本 拖拽到右邊,程序可以選 finder 或者 任何應用程序

run

shell 類型務必選擇 /bin/bash !即使你安裝了 zsh 也不要用!

之前在服務器上安裝了zsh ,結果 PM2 部署項目死活不成功,找了一圈也沒答案,大概沒有我這麼無聊的人,把服務器配置成 zsh ?

shell

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 界面右上角有一個運行,在運行之前我們先模擬選中了一些文件。

select file

添加文件:

select file

測試的時候請把 /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 去掉,命名並保存,就可以像這樣使用:

example

下面可以完善一下上傳結束後的通知:

通知

除此之外,你還可以在系統設置中爲該服務添加快捷鍵,好了,我去取消訂閱 iPic 了......

還有值得一提的是,七牛的對象存儲免費額度還挺大的,拿來做私家圖牀還是很不錯的,我還配置了CDN美滋滋?。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章