141 votes

Comment passer de Blob à ArrayBuffer ?

En étudiant les blobs, j'ai remarqué que lorsque vous avez un ArrayBuffer, vous pouvez facilement le convertir en un blob comme suit :

var dataView = new DataView(arrayBuffer);
var blob = new Blob([dataView], { type: mimeString });

La question que je me pose maintenant est la suivante : est-il possible de passer d'un Blob à un ArrayBuffer ?

4 votes

Les blobs ne sont pas au format JS natif. Ils sont comme des références à des données, mais pas les données réelles. Les données d'un Blob ne peut pas être lu directement, mais cela peut être fait avec certaines API.

10voto

Pacerier Points 15960

await blob.arrayBuffer() est bon.

Le problème est que lorsque le support iOS / Safari est nécessaire pour cela il faudrait ce :

Blob.prototype.arrayBuffer ??=function(){ return new Response(this).arrayBuffer() }

0 votes

stackoverflow.com/a/51758200/3702797 et toutes les autres solutions de repli sont déjà présentes.

0 votes

@Kaiido, Voir stackoverflow.com/questions/15341912/ . Ma méthode est supérieure et est nécessaire jusqu'au support d'iOS. (après quoi la ligne peut simplement être supprimée)

0 votes

Et un FileReader est toujours nécessaire dans IE. Ce que je veux dire, c'est que votre réponse n'offre rien de plus que ce que les réponses précédentes ont donné. Si l'on veut construire un polyfill, toutes les différentes façons de faire la même tâche sont déjà là.

9voto

Kaiido Points 35595

Il y a maintenant (Chrome 76+ & FF 69+) a Blob.prototype.arrayBuffer() qui renverra une Promise se résolvant avec un ArrayBuffer représentant les données du Blob.

(async () => {
  const blob = new Blob(['hello']);
  const buf = await blob.arrayBuffer();
  console.log( buf.byteLength ); // 5
})();

4 votes

Malheureusement, il ne fonctionne pas (encore) dans Safari.

2 votes

@HerrZatacke, voir ma réponse

0 votes

Selon developer.mozilla.org/fr/US/docs/Web/API/Blob/ Safari prend en charge cette API avec la version 14+.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X