這兩天修改公司小程序的一些功能,發(fā)現(xiàn)上傳圖片至OSS失敗,便一直尋找出現(xiàn)了什么問(wèn)題,最后發(fā)現(xiàn)是policy過(guò)期,更改后發(fā)現(xiàn)相應(yīng)的signature也要改,因?yàn)樾枰囟ǖ奶幚聿拍苌蓅ignature,當(dāng)時(shí)好一頓查資料,最后算出signature,在這里做一下總結(jié).
首先,準(zhǔn)備工作:
1.下載Base64.js,hmac.js,sha1.js,crypto.js相關(guān)算法 點(diǎn)擊 。
2.創(chuàng)建一個(gè)用于計(jì)算的policy和signa的js文件,我們只要輸出結(jié)果即可。我們起名為ceshi.js。
3.在ceshi.js引入我們下載的4個(gè)算法文件。
const Base64 = require('./Base64.js'); require('./hmac.js'); require('./sha1.js'); const Crypto = require('./crypto.js');
在ceshi.js
let date = new Date(); date.setHours(date.getHours() + 87677); let srcT = date.toISOString(); const policyText = { "expiration": srcT, //設(shè)置該P(yáng)olicy的失效時(shí)間 "conditions": [ ["content-length-range", 0, 5 * 1024 * 1024] // 設(shè)置上傳文件的大小限制,5mb ] }; const policyBase64 = Base64.encode(JSON.stringify(policyText));
使用此js可計(jì)算出一個(gè)policy
const accesskey = 'QSZ***98V1DW'; // 為了保密我做了處理,大家輸入自己公司的accesskey即可。 const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, { asBytes: true }); const signature = Crypto.util.bytesToBase64(bytes); console.log(policyBase64); console.log("myfunc...."); console.log(signature);
這樣我們便可計(jì)算出signature啦。
ceshi.js
const Base64 = require('./Base64.js'); require('./hmac.js'); require('./sha1.js'); const Crypto = require('./crypto.js'); function myfunc() { let date = new Date(); date.setHours(date.getHours() + 87677); let srcT = date.toISOString(); console.log(srcT); const policyText = { "expiration": srcT, //設(shè)置該P(yáng)olicy的失效時(shí)間 "conditions": [ ["content-length-range", 0, 5 * 1024 * 1024] // 設(shè)置上傳文件的大小限制,5mb ] }; const policyBase64 = Base64.encode(JSON.stringify(policyText)); const accesskey = 'QSZYryqudf8AAzyoAoJbeCIP98V1DW'; const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, { asBytes: true }); const signature = Crypto.util.bytesToBase64(bytes); console.log(policyBase64); console.log("myfunc...."); console.log(signature); } module.exports.myfunc = myfunc;
四、調(diào)用ceshi.js
新建oss.js
const ceshi = require('./ceshi.js'); var app = getApp() Page({ data: { }, onLoad: function (options) { ceshi.myfunc(); }, onReady: function () { }, onShow: function () { }, onHide: function () { }, onUnload: function () { }, onPullDownRefresh: function () { }, onReachBottom: function () { }, onShareAppMessage: function () { } })
以上是全部?jī)?nèi)容,感謝之前看過(guò)的相似文章,在此我自己做了相關(guān)總結(jié),希望能幫大家解決問(wèn)題!謝謝!