J'ai besoin d'une méthode efficace (native) pour convertir un fichier ArrayBuffer
à une chaîne de caractères base64 qui doit être utilisée dans un message multipartite.
Réponses
Trop de publicités?Vous pouvez dériver un tableau normal à partir du tableau ArrayBuffer
en utilisant Array.prototype.slice
. Utilisez une fonction comme Array.prototype.map
pour convertir les octets en caractères et join
pour former une chaîne de caractères.
function arrayBufferToBase64(ab){
var dView = new Uint8Array(ab); //Get a byte view
var arr = Array.prototype.slice.call(dView); //Create a normal array
var arr1 = arr.map(function(item){
return String.fromCharCode(item); //Convert
});
return window.btoa(arr1.join('')); //Form a string
}
Cette méthode est plus rapide car elle ne comporte pas de concaténation de chaînes de caractères.
Utilice uint8-to-b64
pour faire de l'encodage/décodage dans le navigateur et Node.js
De mon côté, en utilisant le navigateur Chrome, j'ai dû utiliser DataView() pour lire un arrayBuffer
function _arrayBufferToBase64( tabU8A ) {
var binary = '';
let lecteur_de_donnees = new DataView(tabU8A);
var len = lecteur_de_donnees.byteLength;
var chaine = '';
var pos1;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode( lecteur_de_donnees.getUint8( i ) );
}
chaine = window.btoa( binary )
return chaine;}
function _arrayBufferToBase64(uarr) {
var strings = [], chunksize = 0xffff;
var len = uarr.length;
for (var i = 0; i * chunksize < len; i++){
strings.push(String.fromCharCode.apply(null, uarr.subarray(i * chunksize, (i + 1) * chunksize)));
}
return strings.join("");
}
C'est mieux si vous utilisez JSZip pour décompresser l'archive à partir d'une chaîne de caractères.
- Réponses précédentes
- Plus de réponses