From 63f8cb631a051ea5dfbdbac0468d0927cf690918 Mon Sep 17 00:00:00 2001 From: Molunerfinn Date: Thu, 21 Dec 2017 11:18:54 +0800 Subject: [PATCH] Added: cos support --- src/main/index.js | 9 ++ src/main/utils/tcYunUpload.js | 90 +++++++++++ src/main/utils/uploader.js | 3 + src/main/utils/weiboUpload.js | 2 +- src/renderer/assets/fonts/iconfont.css | 14 +- src/renderer/assets/fonts/iconfont.eot | Bin 2728 -> 3656 bytes src/renderer/assets/fonts/iconfont.svg | 6 + src/renderer/assets/fonts/iconfont.ttf | Bin 2560 -> 3488 bytes src/renderer/assets/fonts/iconfont.woff | Bin 1820 -> 2468 bytes src/renderer/components/SettingPage.vue | 4 + src/renderer/components/SettingView/TcYun.vue | 142 ++++++++++++++++++ src/renderer/router/index.js | 5 + 12 files changed, 269 insertions(+), 6 deletions(-) create mode 100644 src/main/utils/tcYunUpload.js create mode 100644 src/renderer/components/SettingView/TcYun.vue diff --git a/src/main/index.js b/src/main/index.js index 898e561c..b4f7e492 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -59,6 +59,15 @@ function createTray () { db.read().set('picBed.current', 'qiniu') .write() } + }, + { + label: '腾讯云COS', + type: 'radio', + checked: db.read().get('picBed.current').value() === 'tcyun', + click () { + db.read().set('picBed.current', 'tcyun') + .write() + } } ] }, diff --git a/src/main/utils/tcYunUpload.js b/src/main/utils/tcYunUpload.js new file mode 100644 index 00000000..f346197b --- /dev/null +++ b/src/main/utils/tcYunUpload.js @@ -0,0 +1,90 @@ +import request from 'request-promise' +import * as img2Base64 from './img2base64' +import db from '../../datastore/index' +import { Notification, clipboard } from 'electron' +import crypto from 'crypto' + +// generate COS signature string +const generateSignature = () => { + const options = db.read().get('picBed.tcyun').value() + const secretId = options.secretId + const secretKey = options.secretKey + const appId = options.appId + const bucket = options.bucket + const random = Math.floor(Math.random() * 10000000000) + const current = parseInt(new Date().getTime() / 1000) - 1 + const expired = current + 3600 + + const multiSignature = `a=${appId}&b=${bucket}&k=${secretId}&e=${expired}&t=${current}&r=${random}&f=` + + const signHexKey = crypto.createHmac('sha1', secretKey).update(multiSignature).digest() + const tempString = Buffer.concat([signHexKey, Buffer.from(multiSignature)]) + const signature = Buffer.from(tempString).toString('base64') + return { + signature, + appId, + bucket + } +} + +const postOptions = (fileName, signature, imgBase64) => { + const area = db.read().get('picBed.tcyun.area').value() + const path = db.read().get('picBed.tcyun.path').value() + return { + method: 'POST', + url: `http://${area}.file.myqcloud.com/files/v2/${signature.appId}/${signature.bucket}/${path}${fileName}`, + headers: { + Host: `${area}.file.myqcloud.com`, + Authorization: signature.signature, + contentType: 'multipart/form-data' + }, + formData: { + op: 'upload', + filecontent: Buffer.from(imgBase64, 'base64') + } + } +} + +const tcYunUpload = async (img, type, webContents) => { + try { + webContents.send('uploadProgress', 0) + const imgList = await img2Base64[type](img) + webContents.send('uploadProgress', 30) + const singature = generateSignature() + const length = imgList.length + for (let i in imgList) { + const options = postOptions(imgList[i].fileName, singature, imgList[i].base64Image) + const res = await request(options) + const body = JSON.parse(res) + if (body.message === 'SUCCESS') { + delete imgList[i].base64Image + imgList[i]['imgUrl'] = body.data.source_url + imgList[i]['type'] = 'tcyun' + if (i - length === -1) { + webContents.send('uploadProgress', 60) + } + } else { + webContents.send('uploadProgress', -1) + const notification = new Notification({ + title: '上传失败!', + body: res.body.msg + }) + notification.show() + } + } + webContents.send('uploadProgress', 100) + return imgList + } catch (err) { + const body = JSON.parse(err.error) + webContents.send('uploadProgress', -1) + const notification = new Notification({ + title: '上传失败!', + body: `错误码:${body.code},请打开浏览器粘贴地址查看相关原因。` + }) + notification.show() + clipboard.writeText('https://cloud.tencent.com/document/product/436/8432') + throw new Error(err) + } +} + +export default tcYunUpload diff --git a/src/main/utils/uploader.js b/src/main/utils/uploader.js index 567ff84f..ba33d9c5 100644 --- a/src/main/utils/uploader.js +++ b/src/main/utils/uploader.js @@ -1,5 +1,6 @@ import weiboUpload from './weiboUpload' import qiniuUpload from './qiniuUpload' +import tcYunUpload from './tcYunUpload' import db from '../../datastore/index' const uploader = (img, type, webContents) => { const uploadType = db.read().get('picBed.current').value() @@ -8,6 +9,8 @@ const uploader = (img, type, webContents) => { return weiboUpload(img, type, webContents) case 'qiniu': return qiniuUpload(img, type, webContents) + case 'tcyun': + return tcYunUpload(img, type, webContents) } } diff --git a/src/main/utils/weiboUpload.js b/src/main/utils/weiboUpload.js index b09afb41..3999d6c4 100644 --- a/src/main/utils/weiboUpload.js +++ b/src/main/utils/weiboUpload.js @@ -6,7 +6,7 @@ const j = request.jar() const rp = request.defaults({jar: j}) const UPLOAD_URL = 'http://picupload.service.weibo.com/interface/pic_upload.php?ori=1&mime=image%2Fjpeg&data=base64&url=0&markpos=1&logo=&nick=0&marks=1&app=miniblog' -function postOptions (formData) { +const postOptions = (formData) => { return { method: 'POST', url: 'https://passport.weibo.cn/sso/login', diff --git a/src/renderer/assets/fonts/iconfont.css b/src/renderer/assets/fonts/iconfont.css index ca8fca2b..b8512ecf 100644 --- a/src/renderer/assets/fonts/iconfont.css +++ b/src/renderer/assets/fonts/iconfont.css @@ -1,10 +1,10 @@ @font-face {font-family: "iconfont"; - src: url('iconfont.eot?t=1512627299425'); /* IE9*/ - src: url('iconfont.eot?t=1512627299425#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), - url('iconfont.ttf?t=1512627299425') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ - url('iconfont.svg?t=1512627299425#iconfont') format('svg'); /* iOS 4.1- */ + src: url('iconfont.eot?t=1513753554908'); /* IE9*/ + src: url('iconfont.eot?t=1513753554908#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), + url('iconfont.ttf?t=1513753554908') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('iconfont.svg?t=1513753554908#iconfont') format('svg'); /* iOS 4.1- */ } [class*=" el-icon-ui"], [class^=el-icon-ui] { @@ -17,7 +17,11 @@ .el-icon-ui-weibo:before { content: "\e61c"; } +.el-icon-ui-tcyun:before { content: "\e64c"; } + .el-icon-ui-upload:before { content: "\e61b"; } .el-icon-ui-qiniu:before { content: "\e601"; } +.el-icon-ui-upyun:before { content: "\e602"; } + diff --git a/src/renderer/assets/fonts/iconfont.eot b/src/renderer/assets/fonts/iconfont.eot index 2e61730d0f83dc0607b42e0034ecdab0840ca3e0..1523bca330d4029c8a19f43a9a949128052e7a1f 100644 GIT binary patch delta 1412 zcmZvaO>7%Q6vyYy?9A-<+TLBS?RA_qPS#fQ1y16$eAty*ph$%Z)FMu#Zkm!noVX=v zQ$(>42qE==DkD`wRBCS=I3RN1QqdlJK!Bj)LRES|mN|`(BL1+133Q{ z`iW*^vjqY962~*>53M$ui?w69?TduycL|}**4k_9g}v@)gjh!qIMz7@#ZgHBZB)6= z%Ja@+4~U^)fROJ`jDP!Y-}wZxOp;rj+b|D*cgnO5M>X&cPB@wjHQo=wxn5#I zS{RL&7{^}6mCoUWL+I;7B^29cmv-~rBRe}7+w4L&+_llg2awZ=N$^jPQQ~jMMv7q_kwg#faywguBOb@U~VQVP4W_c zXepY4XqR_bX%gZ$nwhJy=}LMK(v@l*sxt`1VMJ$VFbAtc4JvWUHfj(man4G$2lX-_ z7&}m4ep>YQ08%(0hDtM-58-N^R?~22@Ts&^gdL7qQWc83&(Vj3moWLkvFX&p-5aYS zIU=plERBPvFmR-ivh%hSBN{V;O4id0ZOyL*&%ZLe#~G02M+}AW>~JN>?+<4cCFv)n zp$0s1a-*g&xteNNcH_LLml2?{mfH zjByUI^|m+*ZM=v(U$ZaRlVl!mO;n1oJT?@gezEYnU=vbIVyQ|ImK^Jg7a``PNX3J_ zI!>qKks4l&xK-z>1*~(w^&RtCzPwJu~Sg{=*NO|H~(p;T z9Nqd|en6)s77B|290W*E32gH7i_0h1`1-#@dF_yV5Be308^+hDy5&`_8SCekcvQRWq4mzRYTOSC7UC33GgG(k`6 zxceX_bUb|+{yo(;dhrljbzPig^%t{-^&{IU^GV21KoKRB0d;97nO@7wMJ=0G64GWm Imo5VQ0z`XZV*mgE diff --git a/src/renderer/assets/fonts/iconfont.svg b/src/renderer/assets/fonts/iconfont.svg index a7afe8fc..ca5c855c 100644 --- a/src/renderer/assets/fonts/iconfont.svg +++ b/src/renderer/assets/fonts/iconfont.svg @@ -30,12 +30,18 @@ t9.5 -10.5t21.5 -4h37h67h81h80h64h36q23 0 34 12t2 38q-5 13 -9.5 30.5t-9.5 34.5q- + + + + + + diff --git a/src/renderer/assets/fonts/iconfont.ttf b/src/renderer/assets/fonts/iconfont.ttf index 0276b8f4eaa7628b4b2d4536a6e1cbe13428e6db..efa9c777607258f1adc9083f89c7572282ac1734 100644 GIT binary patch delta 1389 zcmZuvTW=dh6rMA)GqX4E+TOL-_BxJhCu=KLa1y8G;uN)jDg`P~i+Cb&)070_#3@Ng zD~ihtLgE1`BUM6F3jY9+2VNqYXN0&`NT^lG1G2;eh?gRSM8a7o5<+5jznOFS&e80C z=eoP)zh7)UN(j6`2zg62iVAM4Aip^^5jTw?0Ph z9-_K{0ePRjgZ2)hZ=tca>HmTjfjhWmmsaNL{6l#X>vz$QHtL&A@W_{#PobY*t~cgu z=Q8`(2+{8mLL1GM*Vb|a&ZmS#rjc;&#!m4GNdQemx%Ojp#(wMpF%%3C^26-VcmJLT zTMA*b=&OX{9-V+gmtYUJasJDAPPB+b$YiC zC7T`E$#$j>4luUafsTJYM0dQfW**&97`lc_YNS14I*C}$9_nz zPSI)-?({yLl!~zY!H86a;vBd2yl|r?KQ%ZOpS!oSEMk2!;+v%*&=dx?G~!m)lA=#z zhF3|udak7pf&%ZPldsq{)M~lbJ6lY3=0sz&d z5|z>8-q}mz=z*LlM+PHqIUD!Wqs(&SDmA3bdkx3p43s`Sp6^WwPAOHS7c+b87@8pT zimh5q&DrsO!=O}CmHjQ52+G;0tw)nuJflzuiN5=plHiPS4zPWfUxpSA;=$MKbM_RO z!Kn#K0m@@RF*pqrZ=FTiXHhW%MS0dE4qlwL4L-@%CQ@p-cOxW=E-2YSz-hjq;~ zc#KNOk3;)&nx2eoO#B=X*;k1q-N^41T93giBBvO*eA)~wsl=eb>vX3QbwTK z3e7<~24hW&Enl|_M=)=XL7+!eIC>0wkkp7tBfPRGa(H54a{!FD1`xjG?L(|%`TF>~ yV4o+s!tKVb9F`hkhrx{}S5*qAEV0ZAt861S)q`YuD{m_r*}Rrechk9ak?0rW7+%f* diff --git a/src/renderer/assets/fonts/iconfont.woff b/src/renderer/assets/fonts/iconfont.woff index dbb1dab238534a619e8cedc6d370c142cbe156ca..d01359e2292448d96bf61c82959cdfeb497c38cc 100644 GIT binary patch delta 2007 zcmV;|2PpWQ4x|$lcTYw}00961000T301E&B000f3krY3FJ7aBOZ~y=SfB*mhfB*mi z&X+{fbZ2aNW&i*J00005hX4Qv4CML*dT3=~WB>pMhyVZpF8}}lHV@yOp=fAjVE_OJ zxBvhE8~^|SBnRFDh-htecmMzg)Bpeg6951J92@BX0Bmn#VE_OJ=l}o!5C8xG5CxhC zKy6`oZ~y={2lxO003QGV03ZPu0L*S-ZDjxe2p9kW0Yv}+0&PB2{(W$7b94Xz319#K z073u&08}0-6S9*C0XhN8lS2U~fAe8(_}{<~!`#5o02F2f$pHW=pA5ZtoW+sR4TT^K zMNdJ^3o$OBBfK%*rvo^~`!Y=2HMFJtIDwZO(q2kRC@=!q_!h1Ok(gAch2j5Bjo12!Xr|NZ^ zD7YBJHs|*4f`Pl8y-DVLnb1A%zPHnlM@!=2@R+Fd5J25g5h|fJ&`;(qF6l z>?JVES@S20+vsl~YIW=GY;$qz#ylLh1O2@1`xW1RK^L6slxnVme@Bwo;D#v{zvXT< zy41RXw!p4r)jPJGcFn)U38_IRBwl z4(vwyAA&!Dcl{f?!nR3F`s8-Yi_=<33{#oxbVitv`G&Ao=3Nq0YuA@PkJg1vgfd-haDh zxyLm_9nX*K9qJ8${eHLfEL1%?IBMFpx~|S{(I-xCpQH5L_UR`UuffUL>?ADxUTd?3 zMhGoPWuMXy$gjvd$m5a|_v)Wibm>_XCNUB-8s^iPHbp+hY1ZdiS|}wQKza@DvJB}$ zOUKh08x7+Ye;{9TK*|PCgb_NyEX>#(W~eRP60HTpV#{H^#4HVQ#Q>Ttip8}wp+H4D zD-w&~d`|Ni-ff+Tr6yEu-I2P`fsoB{E7#agtTE40) zDOL?;CBsT+HjQYOeD{Zw6}KUKH(46vmCi7!AFfR_f6a?LY3T`1-RhbxY;Kl28&M>K zPT({)L#JX`)D{(|VoJeu$`Yq^pqx-ytKI^W+G^Vc%DAPgUdZk8=HhZt3*TXNlS}1^ z4t#RPQi8IfH$=UWc7mN_H@Z3lsu`N_%=Y(3-a$jihT;2mnKR9yh3*Wg zm1OBqf3o$!7)Kx{J!jnsdv(87888+4I<;iTTUMYr18vpx+pV(T6w6X3p51Ugd<9{; zx?+0M_17$mQbX4kdooIU^^$9rV#BX$6bf7|d|Qh+W1IsJqGA2*u@Bf8Vv{miB{M?S zFpZ-bj8kkl0%DTnWSWvpkmP#hV2w=$ruqm(e_@PWC7(_TEn&vfj)cEL$+_9_Jm+TH zTinaR-QNe7^To&e`-_jK{PLS`Ugk@GMKM~k?p*?5+bU6}Ua;Ht<2VAZ;-SX{{Hq&W zUy1$`FSgXh;xiYO6??yS90E)2e?;FR2T=LBkSMlJp}?eH)c#VPXww)a3)wims>A{i ze~(sk_Fhod===ZO`j+Z7`0hENv2)>P!n4DzllSa6P6&G3o|@|HdRS8^Te45j4M0yy!We<6qda?0*->!!v&QclKv?ob2Er z&C+F~?p`|!mL)#ez45?#mgdVs!h$Pse^U6xgMDtO7U9 zDT8vw48`L{#Wk(ot<^B3V3j!y{AkToI%r9?du9?jKj7TFaOKoP>(5u~MkpUMs>(7E z9|ed{I17R>HI&ri+7f=B5XMuVoqBLU|LI{~^j9q#Wt(e*p^va{`dd!N3F(1po)u33vc_oMT{QU|??e-@p*V!T5lffQbPXvjGJF000000CoW$0yYAi0`3Ebc${Nk zWME)mXE?yX#sC6LK+FY%3=IFld+!xF@?1-GcU80wX^^z#J~Um;Qb5+000!;oQwbf delta 1354 zcmXw&c{J2(7{}kAp<%{usBV^-l4-eJ;v!`%VI=MtTAVC3gBik%k!^QnoCKORh@RCimyud!KVY=Xsy+`9A0S{__-T6e{DQUCCqs0i@8{ z0K3*PK!~%375rFq4ge4zQCLVXGY;yx91y}|BJWuMP@54d4zYVNfegAo0CG6QXNX{? z(qPpbh=_=0kIdQ#`shKFAdnToMKl^RYark>CIJWu^;`2rAhY5c(6Y=Ni_S%I&E)uq zpof5mGy#uIXE6}tRV3U202!9m;U96F&~RjN-2~z>L9lP`*RRQxhxS5UnRXBn&ZM&! zhs3JQ{o-zbW6DY(U~p3L0=KYL_(F+~SF{%;2sW7W)wIQ~DW5wOa%+R%yDg8(YV$Y^ zSvEk7!T+9VZ*yF}Ubn=TCuZ|nTK9(i>|K8T((8UkxR0-n#Cz=c{4>GH44&g^Wbf(N z)*Nyq*C8_I4zC+_=l~sP*lbW;4*3?h@Hh9a3)&7ik;kheB$ELj(!k3@B)z_`b$tz0 z1(yek24`B*Nc9Q|`QmNPBgz&bO#&NyjH+3zQ#=2xo_%VL1F7=*0eeG>iLFGnN1gEd zCyQZ9gak;Sa6cd?zZ$K6JNj`@{ku_`Kj)`#BD8D zD*I*C6h}QG@&3C{Nn;kAeVuAM!^R%EFbp_>HjNGHXo51$^x)^8D&$qJdWu-R;U;Ev zsN{p)+~8&PABxYqW>WKX^B&jk;T-k6*?))Kcckxekzdxh(NPy=QQcqKS>tzV&mM7cjPzz50s}CZF`gmR1dqeBk>_^K1cWc2+BH;5ouyP z8Q}kx9yD!c^8rn8&FrQ4UNbh8lN@q-_6X-s5SD(iV_V3=DW`&lMCLI>OCRnv&GPidHSymeDML&f&_I+ zZSqzE)9rkB;q?70`^TJ7yH(rM+(vHj2@6z(+sB%U-Gix7NfAzk74utLNVEHPd{a6d2C((l15>?C5xGXHU^^+tRLP4xZ@g6d!81C-N6*vH`ag z4P#a>7dSt!uH?FCew~h<67`?d4yH}-(phPtVxvCBb=*~48K=I4vqdW^S|zu3tzC*A z&7VdCBPsPKyhfH-kBvFiMtrepW1~cVc~wSh-MB11Cox_@9|I^lSnB`&f3Lg=$k=2E zAh=jisr{_A8b5@I>p~$u&kMhSgc|5IDg? HM}mI< 七牛设置 + + + 腾讯COS设置 + diff --git a/src/renderer/components/SettingView/TcYun.vue b/src/renderer/components/SettingView/TcYun.vue new file mode 100644 index 00000000..0dd1518c --- /dev/null +++ b/src/renderer/components/SettingView/TcYun.vue @@ -0,0 +1,142 @@ + + + \ No newline at end of file diff --git a/src/renderer/router/index.js b/src/renderer/router/index.js index 286aa2a9..e88b6526 100644 --- a/src/renderer/router/index.js +++ b/src/renderer/router/index.js @@ -30,6 +30,11 @@ export default new Router({ component: require('@/components/SettingView/Qiniu').default, name: 'qiniu' }, + { + path: 'tcyun', + component: require('@/components/SettingView/TcYun').default, + name: 'tcyun' + }, { path: 'gallery', component: require('@/components/SettingView/Gallery').default,