const buffer = newArrayBuffer(12); const uint8Array = newUint8Array(buffer); let str = String.fromCharCode(...uint8Array); // 拼上文件头 let base64 = `data:image/jpeg;base64,${window.btoa(str)}`;
注意注意!! 这种方式如果 buffer 太大就会转换失败,fromCharCode参数太大就会这样 Uncaught (in promise) RangeError: Maximum call stack size exceeded
2、第二种方法
tips:这种方法大图片特别费时间
1 2 3 4 5 6 7
var binary = ''; var bytes = newUint8Array(buffer); var len = bytes.byteLength; for (var i = 0; i < len; i++) { binary += String.fromCharCode(bytes[i]); } window.btoa(binary);
3、第三种方法
tips:这种方法不会出现转换失败和费时间
先将 buffer 转为 blob 对象,再把 blob 转为 base64
1 2 3 4 5 6 7 8
const buffer = newArrayBuffer(buffer数据); let blob = new Blob([buffer]); let reader = new FileReader(); reader.onload = function () { const base = reader.result; console.log(base); }; reader.readAsDataURL(blob);