准备好配置文件 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; //导出方法
网友评论