小程序模板網(wǎng)

微信小程序上傳圖片至OSS的一些個(gè)人總結(jié)

發(fā)布時(shí)間:2020-05-21 09:25 所屬欄目:小程序開發(fā)教程

這兩天修改公司小程序的一些功能,發(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');

一、先轉(zhuǎn)碼Policy

在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

二、計(jì)算signature

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 () {

  }
})

五、文件目錄

六、結(jié)果

以上是全部?jī)?nèi)容,感謝之前看過(guò)的相似文章,在此我自己做了相關(guān)總結(jié),希望能幫大家解決問(wèn)題!謝謝!


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://m.u-renovate.com/wxmini/doc/course/25238.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢
AI智能客服 ×