Преобразование строки base64 в ArrayBuffer



Мне нужно преобразовать строку кодирования base64 в ArrayBuffer.
Строки base64 являются пользовательским вводом, они будут скопированы и вставлены из электронной почты, поэтому их нет при загрузке страницы.
Я хотел бы сделать это в javascript без вызова ajax на сервер, если это возможно.



Я нашел эти ссылки интересными, но они не помогли мне:



ArrayBuffer в кодированную строку base64



речь идет об обратном преобразовании, от ArrayBuffer до в base64, а не наоборот



http://jsperf.com/json-vs-base64/2



Это выглядит хорошо, но я не могу выяснить, как использовать код.



есть ли простой (может быть, родной) способ сделать преобразование? спасибо

733   6  

6 ответов:

попробуйте это:

function _base64ToArrayBuffer(base64) {
    var binary_string =  window.atob(base64);
    var len = binary_string.length;
    var bytes = new Uint8Array( len );
    for (var i = 0; i < len; i++)        {
        bytes[i] = binary_string.charCodeAt(i);
    }
    return bytes.buffer;
}

Goran.it ' s ответ не работает из-за проблемы unicode в javascript - https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding.

В итоге я использовал функцию, указанную в блоге Даниэля Герреро:http://blog.danguer.com/2011/10/24/base64-binary-decoding-in-javascript/

функция указана на ссылке github: https://github.com/danguer/blog-examples/blob/master/js/base64-binary.js

Используйте эти строки

var uintArray = Base64Binary.decode(base64_string);  
var byteArray = Base64Binary.decodeArrayBuffer(base64_string); 

С помощью TypedArray.от:

Uint8Array.from(atob(base64_string), c => c.charCodeAt(0))

производительность для сравнения с версией цикла for Goran.it отвечай.

только что нашел base64-arraybuffer, небольшой пакет npm с невероятно высоким использованием, 5M загрузок в прошлом месяце (2017-08).

https://www.npmjs.com/package/base64-arraybuffer

для тех, кто ищет что-то лучшее решение, это может быть он.

Javascript-это прекрасная среда разработки, поэтому кажется странным, что она не дает решения этой небольшой проблемы. Решения, предлагаемые в других местах на этой странице, потенциально медленны. Вот мое решение. Он использует встроенную функциональность, которая декодирует URL-адреса изображений и звуковых данных base64.

var req = new XMLHttpRequest;
req.open('GET', "data:application/octet;base64," + base64Data);
req.responseType = 'arraybuffer';
req.onload = function fileLoaded(e)
{
   var byteArray = new Int8Array(e.target.response);
   // var shortArray = new Int16Array(e.target.response);
   // var unsignedShortArray = new Int16Array(e.target.response);
   // etc.
}
req.send();

запрос на отправку не выполняется, если строка base 65 плохо сформирована.

тип mime (application/octet), вероятно, не нужен.

проверен в хром. Должен работать в других браузерах.

new TextEncoder().encode("base64").buffer // is ArrayBuffer
new TextEncoder().encode("base64")        // is Uint8Array

на самом деле, вы можете кодировать/декодировать любую строку, а не только строки base64.

MDN:https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder

могу ли я использовать... https://caniuse.com/#feat=textencoder

Polyfill:https://github.com/inexorabletash/text-encoding

Comments

    Ничего не найдено.