寫markdown博客如何將截圖快速上傳到圖牀——記一個工具插件的實現(windows版 開源)(2017-05-31 20:23)css
鑑於寫博客截圖手動上傳到圖牀的步驟過於繁瑣,好久以前寫了一個windows版的截圖軟件插件,用於把圖片快速上傳到圖牀html
從新打包用戶量過億的開源截圖軟件——加入圖片自動上傳到圖牀的功能java
如今換系統了,由windows換成了Mac,系統確實好用,但截圖上傳到圖牀的功能無法子弄過來,網上搜了下現成的軟件,都不太好用。Mac免費軟件不像windows那麼多。在windows系統上是在Greenshot的基礎上實現的七牛圖牀插件,這個軟件在Mac下也有,可是不開源。因此仍是本身動手吧,實現一個mac版的上傳到七牛圖牀的軟件插件。好了,先上最終效果圖:node
選擇的截圖軟件須要知足兩個條件:git
google了一下,搜了幾個,最後覺的katana這個軟件還不錯。github
雖然功能簡單了點,但界面作的比較專業,並且支持service,上面的imgur是一個國外的免費的圖牀服務。好了,就在這上面整吧。web
這個軟件是用Javascript寫的,才知道用javascrpit還能作出Mac的app,開發工具選擇使用WebStorm。研究源碼的時候通常是邊操做軟件,邊看代碼,大概把整個軟件輪廓和相關的細節瞭解了一下。npm
接下來比較棘手的實際上是如何把源碼打包成mac app,把github上打包好的軟件下載下來研究了一番。看一下它的目錄結構,看到了Framework這個文件夾,進到裏面看一下:json
drwxr-xr-x 6 zexu staff 192B 6 24 16:48 Electron Framework.framework drwxr-xr-x 3 zexu staff 96B 6 24 16:48 Katana Helper EH.app drwxr-xr-x 3 zexu staff 96B 6 24 16:48 Katana Helper NP.app drwxr-xr-x 3 zexu staff 96B 6 24 16:48 Katana Helper.app drwxr-xr-x 7 zexu staff 224B 6 24 16:48 Mantle.framework drwxr-xr-x 7 zexu staff 224B 6 24 16:48 ReactiveCocoa.framework drwxr-xr-x 7 zexu staff 224B 6 24 16:48 Squirrel.framework
看到了Electron這個東西,接着google,下面是官網的介紹:windows
使用 JavaScript, HTML 和 CSS 構建跨平臺的桌面應用
看到package.json下面有下面幾個依賴包:
"devDependencies": { "electron": "^2.0.3", "electron-packager": "^12.0.2", "standard": "^11.0.1" }
應該就是它了,用的是electron框架打包的app。
npm install
把全部依賴包安裝到本地,而後cd到項目根目錄執行下面的命令:
zexudeMacBook-Pro:katana zexu$ electron-packager . --overwrite --platform=darwin --arch=x64 --icon=./app/static/images/icon.icns --prune=true --out=release-builds
就一條命令,打包就成了,居然如此簡潔。
先把qiniu的npm包裝上:
npm install qiniu --save
爲這個軟件寫插件須要寫css,html和一寫js的功能函數。一個軟件的功能不少,但要快速聚焦到相關的功能點,有時候光看代碼的效率實在是低。把代碼跑起來,看一些log輸出是不錯的快速熟悉代碼的方法。
如何才能debug呢。看下圖,按照紅色字體添加一個新的Debug Configurations:
網上說解釋器的路徑要寫成下面這樣:
~/github/katana/node_modules/.bin/electron
試了一下webstorm中這個路徑是打不開的,但發現這個文件是一個軟鏈,指向的是上圖中的解釋器路徑,因此直接寫成圖片上的路徑。網上的帖子說設置好以後是能夠加斷點調試的。試了幾回沒有成功,軟件會閃退,應該和這個軟件的多進程相關。log到是能看了,但有些Log不能打印到控制檯上,仍是多進程的問題,最後找到了解決方法,使用下面的變量來打印log:
const con = require('electron').remote.getGlobal('console')
軟件的整個工做流程是下面這樣的:
截圖的時候,先調用Mac的截圖接口,生成截圖文件保存到以下路徑中:
~/.katana/uploads
markdown格式的圖片連接會拷貝到剪貼板中,commond+v將其複製到編輯器中。
具體代碼細節就不介紹了,感興趣本身去github看吧。qiniu的官方文檔感受比較亂。研究了一些時間,把這段代碼貼一下:
const ak = _qiniuService.accessKey const sk = _qiniuService.secretKey const sc = _qiniuService.Scope const dm = _qiniuService.defaultDomain var key = path.basename(file) var mdpath = '![](' + path.join(dm, key) + ')' const link = {link: mdpath} var mac = new qiniu.auth.digest.Mac(ak, sk) var options = { scope: sc + ':' + key, expires: 0 } var putPolicy = new qiniu.rs.PutPolicy(options) var uploadToken = putPolicy.uploadToken(mac) var config = new qiniu.conf.Config() config.zone = qiniu.zone.Zone_z1 var formUploader = new qiniu.form_up.FormUploader(config) var putExtra = new qiniu.form_up.PutExtra() formUploader.putFile(uploadToken, key, file, putExtra, function ( respErr, respBody, respInfo) { console.log('status:' + respInfo.statusCode) if (respErr) { callback(null, respErr) throw respErr } if (respInfo.statusCode === 200) { callback(link) console.log(respBody) } else { console.log(respInfo.statusCode) console.log(respBody) //callback(link) } })
各個地區以及對應的zone變量值以下:
給一個打包好的連接,感興趣的能夠玩一下:
連接:https://pan.baidu.com/s/1JEej70eO5FCqF6CibOmdLQ 密碼:qnq7
源碼連接,在dev分支上開發的: