繁体   English   中英

通过javascript将base64字符串转换为字节数组

[英]Convert base64 string into byte array through javascript

我想通过javascript将“base64”字符串转换为字节数组。

我收到了来自 URL 的字符串,例如。

 ("data:image/jpeg;base64,/9j/4QN6RXhpZgAASUkqAAgAAAAIA)

我想将字符串转换为字节数组。 因为我需要这个字节数组来发送 Rest API 端点。 其余 API Content-type=application/octet-stream。

您可以使用XMLHttpRequest为您做一些肮脏的工作:

 var url = document.createElement("canvas").toDataURL(); // some data-uri var xhr = new XMLHttpRequest(); xhr.open("GET", url); xhr.responseType = "arraybuffer"; xhr.onload = function() { // result = ArrayBuffer, from here assign a view to it if (xhr.status === 200) console.log(new Uint8Array(xhr.response)); }; xhr.send();

它比使用atob()代码多一点,但所有转换都在内部进行。 它也是异步的,可以帮助处理更大的数据 URI。

在较新的浏览器(支持它)中,您可以改用fetch()

 // note: atm not all browsers support these features. fetch(document.createElement("canvas").toDataURL()) // pass in some data-uri .then(function(response) {return response.arrayBuffer()}) .then(function(buffer) { console.log(new Uint8Array(buffer)); });

您可以尝试以下操作;

function test(base64StringFromURL)
{
   var parts = base64StringFromURL.split(";base64,");
   var contentType = parts[0].replace("data:", "");
   var base64 = parts[1];
   var byteArray = base64ToByteArray(base64);
   ..
}

function base64ToByteArray(base64String) {
        try {            
            var sliceSize = 1024;
            var byteCharacters = atob(base64String);
            var bytesLength = byteCharacters.length;
            var slicesCount = Math.ceil(bytesLength / sliceSize);
            var byteArrays = new Array(slicesCount);

            for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
                var begin = sliceIndex * sliceSize;
                var end = Math.min(begin + sliceSize, bytesLength);

                var bytes = new Array(end - begin);
                for (var offset = begin, i = 0; offset < end; ++i, ++offset) {
                    bytes[i] = byteCharacters[offset].charCodeAt(0);
                }
                byteArrays[sliceIndex] = new Uint8Array(bytes);
            }
            return byteArrays;
        } catch (e) {
            console.log("Couldn't convert to byte array: " + e);
            return undefined;
        }
    }

这将被证明是非常简短的解决方案。

const byteArray = new Buffer(base64String.replace(/^[\w\d;:\/]+base64\,/g, ''), 'base64');

base64String 是包含 base 64 字符串的字符串。

byteArray 是您需要的数组。

正则表达式替换是可选的,它只是用来处理前缀,就像 dataurl 字符串一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM