小程序华为云 obs对象存储

准备好配置文件 config.js

export const uploadImageUrl = 'https://+"桶名"+Endpoint/';//服务器域名
    export const AK= 'AK'; //密钥
    export const SK = 'SK'; //密钥
    export const timeout = 87600; //超时时间
    export const maxSize = 1024 * 1024 * 1024; //最大支持上传的容量
    export const PermissionPath = '路径' //服务器上传路径

封装上传方法

const env = require("./config.js");
 const Base64 = require("./js-base64.js");  //官方下载
 const Crypto = require("./crypto-js.js");//官方下载

 /**
  * @param {*} options 自定义拓展参数
  */
 const uploadFile = function (options) {
   
   let {
       filePath, // 文件地址
       success,
       progress,
       fail
   } = options;
   
   
   // policy编码计算方法
   let getPolicyEncode = (policy) => {
       // 传入表单上传的policy字段,对policy进行Base64编码
       let encodedPolicy = Base64.encode(JSON.stringify(policy));
       return encodedPolicy;
   };
   
   // 签名计算方法
   let getSignature = (policyEncoded, SecretKey) => {
       // 利用SK对Base64编码后的policy结果进行HMAC-SHA1签名计算
       let bytes = Crypto.HmacSHA1(policyEncoded, SecretKey);
       // 对计算结果进行Base64编码,得到最终的签名信息
       let signature = Crypto.enc.Base64.stringify(bytes);
       return signature;
   };
   
   
   //时间格式
   let time = new Date();
   let year = time.getFullYear();
   let month = time.getMonth() + 1;
   let day = time.getDate();
   //路径权限 + 项目code + '年/月/日'+ '随机字符' 
   let projectCode = uni.getStorageSync('userInfo').projectCode;
   // 文件保存名
   let aliyunFileKey = env.PermissionPath + projectCode + `/${year}/${month}/${day}/` + uni.$u.guid(20) + '.aac';
   
   // 设定policy内容,policy规则定义可参考步骤1中的超链接签名计算规则文档
   let date = new Date();
   date.setHours(date.getHours() + env.timeout);
   let OBSPolicy = {
     "expiration": date.toISOString(),
     "conditions": [
       { "bucket": "vd-asr" },  // 桶名要和配置文件中endpoint中的桶名保持一致
       { 'key': aliyunFileKey } // 很重要这一步 必须带上
     ]
   };
   
   // 官方的方法调用
   let policyEncoded = getPolicyEncode(OBSPolicy);                    // 计算base64编码后的policy
   let signature = getSignature(policyEncoded, env.OSSAccessKeyId);     // 计算signature
   
   // 发起请求
   return new Promise( (resolve,reject) => {
       uni.uploadFile({
           url: env.uploadImageUrl,
           name: 'file',
           filePath: filePath,
           header:{
                'Content-Disposition':'attachment'
           },
           
           formData: {
               'AccessKeyId': env.AccessKeySecret,
               'policy': policyEncoded,
               'signature': signature,
               'key': aliyunFileKey
           },
           
           success: (res) => {
               console.log("-----success------------------")
               console.log('===== 上传成功:', res);
               resolve(env.uploadImageUrl+aliyunFileKey)
               // 异步结束标识
               // resolve();
           },
        
           fail: (err) => {
               console.log("-------fail----------------")
               console.log(err)
               reject(false)
           },
           
       });
   });
 
 };

 module.exports = uploadFile;  //导出方法

你可能感兴趣的:(小程序华为云 obs对象存储)