這兩天修改公司小程序的一些功能,發現上傳圖片至OSS失敗,便一直尋找出現了什麼問題,最後發現是policy過時,更改後發現相應的signature也要改,由於須要特定的處理才能生成signature,當時好一頓查資料,最後算出signature,在這裏作一下總結,也借簽了一位做者的文章。https://segmentfault.com/a/11...git
首先,準備工做:
1.下載Base64.js,hmac.js,sha1.js,crypto.js相關算法點擊。
2.建立一個用於計算的policy和signa的js文件,咱們只要輸出結果便可。咱們起名爲ceshi.js。
3.在ceshi.js引入咱們下載的4個算法文件。github
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, //設置該Policy的失效時間 "conditions": [ ["content-length-range", 0, 5 * 1024 * 1024] // 設置上傳文件的大小限制,5mb ] }; const policyBase64 = Base64.encode(JSON.stringify(policyText));
使用此js可計算出一個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);
這樣咱們即可計算出signature啦。segmentfault
ceshi.jsapp
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, //設置該Policy的失效時間 "conditions": [ ["content-length-range", 0, 5 * 1024 * 1024] // 設置上傳文件的大小限制,5mb ] }; const policyBase64 = Base64.encode(JSON.stringify(policyText)); const accesskey = 'QSZYr****CIP98V1DW'; 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;
4、調用ceshi.js
新建oss.jside
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 () { } })
以上是所有內容,感謝以前看過的類似文章,在此我本身作了相關總結,但願能幫你們解決問題!謝謝!ui