美文网首页
小程序华为云 obs对象存储

小程序华为云 obs对象存储

作者: Aurora_9e36 | 来源:发表于2021-10-13 15:42 被阅读0次

    准备好配置文件 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对象存储

          本文链接:https://www.haomeiwen.com/subject/dihuoltx.html