const qiniuUploader = require("./qiniuUploader");
const Buffer = require('./buffer.js');
const CryptoJS = require('./hmac-sha1.js');
const base64 = require('./enc-base64.js');
const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
const base64ToUrlSafe = (v) => {
return v.replace(/\//g, '_').replace(/\+/g, '-');
}
/**
*
* @param {opt.ak 七牛云 ak opt.sk 七牛云 sk opt.bkt七牛云的命名空间}} opt
*/
const getQiniuToken = (opt) => {
var accessKey = opt.ak;
var secretkey = opt.sk;
var bucket = opt.bkt;
var strdata = {
"scope": bucket,//空间域名
"deadline": Date.parse(new Date()) + 360000 //当前时间截
}
wx.setStorageSync('tokentime', strdata.deadline)
var str = JSON.stringify(strdata);
var encoded = Buffer.from(str).toString('base64');
var encodedStr = base64ToUrlSafe(encoded);
//HmacSHA1加密
var sign = CryptoJS.HmacSHA1(encodedStr, secretkey);
var cod = base64.stringify(sign)
var encodedSign = base64ToUrlSafe(cod);
var token = accessKey + ':' + encodedSign + ':' + encodedStr;
console.log('token', token)
return token;
}
/**
* 初始化七牛云相关配置
* @param {}} token 七牛的加密token
*/
const initQiniu = (token) => {
var options = {
// bucket所在区域,这里是华北区。ECN, SCN, NCN, NA, ASG,分别对应七牛云的:华东,华南,华北,北美,新加坡 5 个区域
region: 'ECN',
// 获取uptoken方法三选一即可,执行优先级为:uptoken > uptokenURL > uptokenFunc。三选一,剩下两个置空。推荐使用uptokenURL,详情请见 README.md
// 由其他程序生成七牛云uptoken,然后直接写入uptoken
uptoken: token,
// 从指定 url 通过 HTTP GET 获取 uptoken,返回的格式必须是 json 且包含 uptoken 字段,例如: {"uptoken": "0MLvWPnyy..."}
// uptokenURL: 'https://[yourserver.com]/api/uptoken',
// uptokenFunc 这个属性的值可以是一个用来生成uptoken的函数,详情请见 README.md
// uptokenFunc: function () { },
// bucket 外链域名,下载资源时用到。如果设置,会在 success callback 的 res 参数加上可以直接使用的 fileURL 字段。否则需要自己拼接
domain: 'https://qiniu.sijitianjian.com',
// qiniuShouldUseQiniuFileName 如果是 true,则文件的 key 由 qiniu 服务器分配(全局去重)。如果是 false,则文件的 key 使用微信自动生成的 filename。出于初代sdk用户升级后兼容问题的考虑,默认是 false。
// 微信自动生成的 filename较长,导致fileURL较长。推荐使用{qiniuShouldUseQiniuFileName: true} + "通过fileURL下载文件时,自定义下载名" 的组合方式。
// 自定义上传key 需要两个条件:1. 此处shouldUseQiniuFileName值为false。 2. 通过修改qiniuUploader.upload方法传入的options参数,可以进行自定义key。(请不要直接在sdk中修改options参数,修改方法请见demo的index.js)
// 通过fileURL下载文件时,自定义下载名,请参考:七牛云“对象存储 > 产品手册 > 下载资源 > 下载设置 > 自定义资源下载名”(https://developer.qiniu.com/kodo/manual/1659/download-setting)。本sdk在README.md的"常见问题"板块中,有"通过fileURL下载文件时,自定义下载名"使用样例。
shouldUseQiniuFileName: false
};
// 将七牛云相关配置初始化进本sdk
qiniuUploader.init(options);
}
/**
* 获取唯一字符串
*/
const getUUid = () => {
var s = [];
var hexDigits = "0123456789abcdef";
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = "-";
var uuid = s.join("");
return uuid;
}
module.exports = {
formatTime: formatTime,
getUUid,
formatNumber,
base64ToUrlSafe,
getQiniuToken,
initQiniu
}