Преобразование строки base64 в ArrayBuffer
Мне нужно преобразовать строку кодирования base64 в ArrayBuffer.
Строки base64 являются пользовательским вводом, они будут скопированы и вставлены из электронной почты, поэтому их нет при загрузке страницы.
Я хотел бы сделать это в javascript без вызова ajax на сервер, если это возможно.
Я нашел эти ссылки интересными, но они не помогли мне:
ArrayBuffer в кодированную строку base64
речь идет об обратном преобразовании, от ArrayBuffer до в base64, а не наоборот
http://jsperf.com/json-vs-base64/2
Это выглядит хорошо, но я не могу выяснить, как использовать код.
есть ли простой (может быть, родной) способ сделать преобразование? спасибо
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
Comments