J'étudiais les Blobs et j'ai remarqué que lorsque vous avez un ArrayBuffer, vous pouvez facilement le convertir en 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?
javascript
blob
arraybuffer
Jeanluca Scaljeri
la source
la source
Blob
ne peuvent pas être lues directement, mais cela pourrait être fait avec certaines API.Réponses:
L'
Response
API consomme un (immuable) àBlob
partir duquel les données peuvent être récupérées de plusieurs manières. L' OP a seulement demandéArrayBuffer
, et en voici une démonstration.vous pouvez également utiliser ceci:
la source
Blob.arrayBuffer()
qui a en fait une compatibilité assez médiocre même en 2020, caniuse.com/#feat=mdn-api_blob_arraybuffer ou developer.mozilla.org/en-US/docs/Web/API/Blob/arrayBufferVous pouvez utiliser
FileReader
pour lire leBlob
sous forme de fichierArrayBuffer
.Voici un petit exemple:
Voici un exemple plus long:
Cela a été testé dans la console de Chrome 27—69, Firefox 20—60 et Safari 6—11.
Voici également une démonstration en direct avec laquelle vous pouvez jouer: https://jsfiddle.net/potatosalad/FbaM6/
Mise à jour 23/06/2018: Merci à Klaus Klein pour le conseil sur
event.target.result
versusthis.result
Référence:
la source
this
.<EventTarget>.result
devrait réparer ça!Juste pour compléter la réponse de M. @potatosalad.
Vous n'avez pas réellement besoin d'accéder à la portée de la fonction pour obtenir le résultat du rappel onload , vous pouvez effectuer librement les opérations suivantes sur le paramètre d' événement :
Pourquoi c'est mieux? Parce qu'alors nous pouvons utiliser la fonction de flèche sans perdre le contexte
la source
Ou vous pouvez utiliser l'API fetch
Je ne sais pas quelle est la différence de performances, et cela apparaîtra également sur votre onglet réseau dans DevTools.
la source
new Response(blob).arrayBuffer()
Il existe maintenant (Chrome 76+ et FF 69+) une méthode Blob.prototype.arrayBuffer () qui retournera une promesse résolue avec un ArrayBuffer représentant les données du Blob.
la source