const policy = _this.getPolicyBase64(6000)
const signature = _this.getSignature(policy); //获取签名
uni.uploadFile({
url: _this.uploadConf.other.host, //oss上传地址
filePath: filePath,
name: 'file',
formData: {
'key': fileName,
'policy': policy,
'x-oss-security-token': _this.uploadConf.config.stsToken, //后台返回的token
'OSSAccessKeyId': _this.uploadConf.config.accessKeyId,//后台返回的accessKeyId
'Signature': signature,
'success_action_status': '200'
},
success: (uploadFileRes) => {
console.log(uploadFileRes)
},
complete: (err) => {
console.log(err)
}
})
getPolicyBase64(timeout) {
const FILE_SIZE = 100 * 1024 * 1024; // 5MB
let date = new Date();
date.setHours(date.getHours() + timeout);
let srcT = date.toISOString();
const policyText = {
"expiration": srcT, //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了
"conditions": [{
"bucket": this.uploadConf.config.bucket //oss Bucket
},
["content-length-range", 0, FILE_SIZE] // 设置上传文件的大小限制,5mb
]
};
const base64 = require('../../common/ossutil/base64.js');
const policyBase64 = base64.encode(JSON.stringify(policyText));
return policyBase64;
},
getSignature(policyBase64) {
let _this = this;
require('../../common/ossutil/hmac.js');
require('../../common/ossutil/sha1.js');
const Crypto = require('../../common/ossutil/crypto.js');
const accesskey = _this.uploadConf.config.accessKeySecret;
const bytes = Crypto.HMAC(Crypto.SHA1, policyBase64, accesskey, {
asBytes: true
});
const signature = Crypto.util.bytesToBase64(bytes);
return signature;
},
hmac.js sha1.js crypto.js 这三个自己找一下
5 个回复
安安静静是女神 (作者)
hmac.js sha1.js crypto.js 这三个自己找一下
v***@yeah.net
你好,请问你是怎么上传到oss里面的?能给贴部分代码吗?
安安静静是女神 (作者)
楼下
2021-04-07 10:49
1***@qq.com
回复 安安静静是女神:你好 请问解决了吗
2021-05-18 12:52
安安静静是女神 (作者)
回复 1***@qq.com: 没有
2021-06-17 15:10
2***@qq.com
请问如何获取响应头有方法了么?
安安静静是女神 (作者)
没有
2021-07-15 11:26
9***@qq.com
不用拿,路径就是自己设置的_this.uploadConf.other.host+fileName
前端JASON - 接单uniapp项目&插件/联系front_jason/主页daxiong.site
已经封装好,前端直传到oss,不用后端签名,有需要的可以直接去下载 https://ext.dcloud.net.cn/plugin?id=13540