Alibaba Cloud OSS への WeChat アプレット アップロード コード

Alibaba Cloud OSS への WeChat アプレット アップロード コード

最初の一歩

ルート ディレクトリに config.js フォルダーを作成します。

var fileHost="xxxx.aliyuncs.com(你的阿里云oss地址)"
var config = {
    
    
  //aliyun OSS config
  uploadImageUrl: `${
      
      fileHost}`, //默认存在根目录,可根据需求改
  AccessKeySecret: '填你自己的AccessKeySecret',
  OSSAccessKeyId: '填你自己的 OSSAccessKeyId',
  timeout: 87600 //这个是上传文件时Policy的失效时间
};
module.exports = config

第二段階

コードのリファクタリングWeChat アプレット インターフェイスを使用するように変更されましたコードで使用されるさまざまなアルゴリズムのソースについては、詳細については、回答の下部にある元の回答を参照してください。
Base64、hmac、sha1、暗号関連のアルゴリズムは、ここをクリックしてください

const env = require('../config.js');

const Base64 = require('./Base64.js');
//Base64,hmac,sha1,crypto相关算法
//参考这里https://github.com/peterhuang007/weixinFileToaliyun.git

require('./hmac.js');
require('./sha1.js');
const Crypto = require('./crypto.js');


const uploadFile = function (params) {
    
    
  if (!params.filePath || params.filePath.length < 9) {
    
    
    wx.showModal({
    
    
      title: '图片错误',
      content: '请重试',
      showCancel: false,
    })
    return;
  }
  const aliyunFileKey = params.dir + params.filePath.replace('wxfile://', '');

  const aliyunServerURL = env.uploadImageUrl;
  const accessid = env.OSSAccessKeyId;
  const policyBase64 = getPolicyBase64();
  const signature = getSignature(policyBase64);

  console.log('aliyunFileKey=', aliyunFileKey);
  console.log('aliyunServerURL', aliyunServerURL);
  wx.uploadFile({
    
    
    url: aliyunServerURL, 
    filePath: params.filePath,
    name: 'file',
    formData: {
    
    
      'key': aliyunFileKey,
      'policy': policyBase64,
      'OSSAccessKeyId': accessid,
      'signature': signature,
      'success_action_status': '200',
    },
    success: function (res) {
    
    
      if (res.statusCode != 200) {
    
    
        if(params.fail){
    
    
          params.fail(res)
        }
        return;
      }
      if(params.success){
    
    
        params.success(aliyunFileKey);
      }
    },
    fail: function (err) {
    
    
      err.wxaddinfo = aliyunServerURL;
      if (params.fail) {
    
    
        params.fail(err)
      }
    },
  })
}

const getPolicyBase64 = function () {
    
    
  let date = new Date();
  date.setHours(date.getHours() + env.timeout);
  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));
  return policyBase64;
}

const getSignature = function (policyBase64) {
    
    
  const accesskey = env.AccessKeySecret;

  const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
    
    
    asBytes: true
  });
  const signature = Crypto.util.bytesToBase64(bytes);

  return signature;
}

module.exports = uploadFile;

三段目

手順

const uploadImage = require('../../utils/uploadAliyun.js');

必要な場所

uploadImage(
{
    
    
  filePath: filePath,
  dir: "images/",
  success: function (res) {
    
    
    console.log("上传成功")
  },
  fail: function (res) {
    
    
    console.log("上传失败")
    console.log(res)
  }
})

書類

パラメータ タイプ 必要 例証する
ファイルパス はい WeChat ローカル ファイル名
dir はい Alibaba Cloud oss ディレクトリに保存します。"" (空文字列) を入力できます。
成功 関数 いいえ アップロード成功のコールバック関数。戻り値は保存されたネットワーク パスです。
失敗 関数 いいえ アップロード失敗のコールバック関数。戻り値は、公式の uploadfile API ドキュメントと一致しています。

Alibaba Cloud oss サーバーのアドレス設定について:
Alibaba Cloud oss は https でアクセスできますが、独自ドメイン名をバインドしてから独自ドメイン名でアクセスすると証明書エラーが発生します。

解決策: 独自にバインドされたドメイン名を使用する代わりに、Alibaba Cloud oss のデフォルトのドメイン名を使用します。

この記事は他の人のブログに転載されています(短冊)

元のアドレス: https://www.jianshu.com/p/34d6dcbdc2e5 Jianshu ブログ

おすすめ

転載: blog.csdn.net/weixin_45582846/article/details/121886714