一开始我用的encodeURI而非encodeURIComponent导致签名一直异常,坑了我半天时间
encodeUrl
看文档可知encodeURI 保留了一些字符,这些字符即便具有适当的UTF-8转义序列也不会被转义
类型 | 包含 |
---|---|
保留字符 | ; , / ? : @ & = + $ |
非转义的字符 | 字母 数字 - _ . ! ~ * ' ( ) |
数字符号 | # |
function getReqSign(params: any, appkey: string) {
// 1. 字典升序排序
params = ksort(params);
// 2. 拼按URL键值对
let str = '';
for (const key in params) {
if (params.hasOwnProperty(key)) {
const element = params[key]
if (element === '')
continue
str += key + '=' + encodeURIComponent(element) + '&'
}
}
str += 'app_key=' + appkey
// 4. MD5运算+转换大写,得到请求签名
params.sign = md5(str).toUpperCase()
return params
}
function ksort(obj: any) {
var keys = Object.keys(obj).sort()
, sortedObj: any = {};
for (var i in keys) {
sortedObj[keys[i]] = obj[keys[i]];
}
return sortedObj;
}
主要利用canvas的toDataURL,toDataURL的第二个参数可以调整图片的质量,能够起到压缩图片的功能。
export function getBase64Image(img: HTMLImageElement) {
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
var dataURL = canvas.toDataURL("image/jpeg",0.5);
//toDataURL的第二个参数可以调整压缩率
// return dataURL
return dataURL.replace("data:image/jpeg;base64,", "");
}