// uint8array转为base64字符串
const uint8arrayToBase64 = function(u8Arr) {
try{
let CHUNK_SIZE = 0x8000; //arbitrary number
let index = 0;
let length = u8Arr.length;
let result = '';
let slice;
while (index < length) {
slice = u8Arr.subarray(index, Math.min(index + CHUNK_SIZE, length));
result += String.fromCharCode.apply(null, slice);
index += CHUNK_SIZE;
}
// web image base64图片格式: "data:image/png;base64," + b64encoded;
// return "data:image/png;base64," + btoa(result);
return btoa(result);
}
catch(e) {
throw e;
}
}
// base64字符串转为uint8array数组
const base64ToUint8Array = function(base64String) {
try{
let padding = '='.repeat((4 - base64String.length % 4) % 4);
let base64 = (base64String + padding)
.replace(/\-/g, '+')
.replace(/_/g, '/');
let rawData = atob(base64);
let outputArray = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
}
catch(e) {
throw e;
}
}
// 判断是否json
const isJson = function(_str){
if (typeof _str === 'string') {
try {
JSON.parse(_str);
return true;
} catch(e) {}
}
return false;
}
// base64加密
const base64Encode = function(rawStr){
if (typeof rawStr === 'undefined') {
return null;
}
let result;
try{
result = btoa(unescape(encodeURIComponent(JSON.stringify(rawStr))));
}
catch(e) {
throw e;
}
return result;
}
// base64解密
const base64Decode = function(base64Str){
if (base64Str) {
// 解密可能存在错误,所以需要try
try{
let parsedStr = decodeURIComponent(escape(atob(base64Str)));
if (isJson(parsedStr)) {
// 有的字符串不可以json恢复
parsedStr = JSON.parse(parsedStr);
}
return parsedStr;
} catch (e) {
}
}
return null;
}
// uint8array转base64
const uint8arrayToBase64 = (value) => {
// 必须定义 binary 二进制
return Buffer.from(value, 'binary').toString('base64');
}
const base64ToUint8array = (value) => {
value = Buffer.from(value, 'base64').toString('binary');
let len = value.length;
let outputArray = new Uint8Array(len);
for (let i = 0; i < len; ++i) {
outputArray[i] = value.charCodeAt(i);
}
return outputArray;
}
// 判断是否json
const isJson = function(_str){
if (typeof _str === 'string') {
try {
JSON.parse(_str);
return true;
} catch(e) {}
}
return false;
}
// base64加密
const base64Encode = (value) => {
if (typeof value === 'undefined') {
return null;
}
return new Buffer(JSON.stringify(value), 'binary').toString('base64');
}
// base64解密
const base64Decode = (value) => {
value = new Buffer(value, 'base64').toString('binary');
if (isJson(value)) {
value = JSON.parse(value);
}
return value;
}