javascript - online - Convierte cadena de base64 a ArrayBuffer
decodificar imagen base64 javascript (6)
Acaba de encontrar base64-arraybuffer, un pequeño paquete npm con un uso increíblemente alto, 5 millones de descargas el mes pasado (2017-08).
https://www.npmjs.com/package/base64-arraybuffer
Para cualquiera que busque algo de la mejor solución estándar, puede ser.
Necesito convertir una cadena de codificación base64 en un ArrayBuffer. Las cadenas base64 son entradas del usuario, se copiarán y pegarán desde un correo electrónico, por lo que no estarán allí cuando se cargue la página. Me gustaría hacer esto en javascript sin hacer una llamada ajax al servidor si es posible.
Encontré esos enlaces interesantes, pero no me ayudaron:
ArrayBuffer a la cadena codificada en base64
se trata de la conversión opuesta, de ArrayBuffer a base64, no al revés
http://jsperf.com/json-vs-base64/2
esto se ve bien, pero no puedo entender cómo usar el código.
¿Hay alguna manera fácil (quizás nativa) de hacer la conversión? Gracias
Javascript es un entorno de desarrollo fino, por lo que parece extraño que no brinde una solución a este pequeño problema. Las soluciones ofrecidas en otra parte de esta página son potencialmente lentas. Aquí está mi solución. Emplea la funcionalidad incorporada que decodifica las URL de datos de sonido e imágenes 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();
La solicitud de envío falla si la cadena de la base 65 está mal formada.
El tipo de mime (aplicación / octeto) probablemente sea innecesario.
Probado en cromo. Debería funcionar en otros navegadores.
La respuesta de Goran.it no funciona debido a un problema unicode en javascript - https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding .
Terminé usando la función que figura en el blog de Daniel Guerrero: http://blog.danguer.com/2011/10/24/base64-binary-decoding-in-javascript/
La función aparece en el enlace de github: https://github.com/danguer/blog-examples/blob/master/js/base64-binary.js
Usa estas líneas
var uintArray = Base64Binary.decode(base64_string);
var byteArray = Base64Binary.decodeArrayBuffer(base64_string);
Prueba esto:
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;
}
Usando TypedArray.from :
Uint8Array.from(atob(base64_string), c => c.charCodeAt(0))
Rendimiento que se comparará con la versión for loop de la respuesta Goran.it.
new TextEncoder().encode("base64").buffer // is ArrayBuffer
new TextEncoder().encode("base64") // is Uint8Array
En realidad, puedes codificar / decodificar cualquier cadena, no solo la cadena base64.
MDN: https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder
¿Puedo usar ... https://caniuse.com/#feat=textencoder