我需要一个有效的(读原生)的方式来转换一个ArrayBuffer
到一个base64字符串,这需要在一个多部分的帖子使用。
发布于 2012-02-27 09:29:03
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
发布于 2012-07-19 22:02:01
这对我来说很好:
var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));
在ES6中,语法要简单一点:
const base64String = btoa(String.fromCharCode(...new Uint8Array(arrayBuffer)));
正如注释中指出的,当ArrayBuffer
很大时,此方法可能会在某些浏览器中导致运行时错误。在任何情况下,确切的大小限制都取决于实现。
发布于 2017-02-20 07:56:26
对于那些喜欢它简短的人,这里有另一个使用Array.reduce
的方法,它不会导致堆栈溢出:
var base64 = btoa(
new Uint8Array(arrayBuffer)
.reduce((data, byte) => data + String.fromCharCode(byte), '')
);
https://stackoverflow.com/questions/9267899
复制相似问题