ArrayBuffer 到 base64 编码字符串

2022-08-30 00:14:34

我需要一种有效的(读取本机)方法来将a转换为base64字符串,该字符串需要在多部分帖子上使用。ArrayBuffer


答案 1
function _arrayBufferToBase64( buffer ) {
    var binary = '';
    var bytes = new Uint8Array( buffer );
    var len = bytes.byteLength;
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode( bytes[ i ] );
    }
    return window.btoa( binary );
}

但是,非本机实现更快,例如 https://gist.github.com/958841 看到 http://jsperf.com/encoding-xhr-image-data/6

更新的基准测试:https://jsben.ch/wnaZC


答案 2

这对我来说很好:

var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));

在ES6中,语法更简单一些:

const base64String = btoa(String.fromCharCode(...new Uint8Array(arrayBuffer)));

如注释中所指出的,此方法可能会导致某些浏览器中的运行时错误(如果较大)。在任何情况下,确切的大小限制都取决于实现。ArrayBuffer