base64 封装的一些 base64 操作函数
typescript
/**
* base64编码
* 先encodeURIComponent对字符进行编码,然后获取二进制数据的十六进制字符串,然后从码点得到二进制字符串
* @param str
* @returns
*/
export function base64Encode(str: string) {
return btoa(
encodeURIComponent(str).replace(/%([a-zA-Z0-9]{2})/g, (m, s: string) => {
return String.fromCodePoint(parseInt(s, 16))
})
)
}
/**
* base64解码
* 先将base64进行解码,然后对二进制字符串获取码点,然后转换成十六进制,然后拼接%AA的形式通过decodeURIComponent进行解编码
* @param str
* @returns
*/
export function base64Decode(str: string) {
return decodeURIComponent(
atob(str)
.split('')
.map(c => {
return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`
})
.join('')
)
}
/**
* base64转字节数组
* @param base64Str base64的字符串
*/
export function base64ToArrayBuffer(base64Str: string): ArrayBuffer {
const data = atob(base64Str)
const buffer = new Uint8Array(data.length)
for (let index = 0; index < data.length; index++) {
const val = data[index]
buffer[index] = val.charCodeAt(0)
}
return buffer
}
/**
* 字节数组转base64
* @param arraybuffer
*/
export function arrayBufferToBase64(arraybuffer: ArrayBuffer): string {
const bytes = new Uint8Array(arraybuffer)
let res = ''
bytes.forEach(v => {
res += String.fromCharCode(v)
})
return btoa(res)
}
/**
* 通过base64数据转Blob(File)对象
* @param base64 数据的base64
* @param mimeType 文件类型 eg:image/png
*/
export function base64ToBlob(base64Str: string, mimeType: string): Blob {
return new Blob([base64ToArrayBuffer(base64Str)], { type: mimeType })
}
/**
* 从base64到dataUrl,默认application/octet-stream
* @param base64Str
* @param mimeType
* @returns
*/
export function base64ToDataURL(base64Str: string, mimeType: string = 'application/octet-stream') {
return `data:${mimeType};base64,${base64Str}`
}