Ich habe Blobs studiert und festgestellt, dass Sie einen ArrayBuffer wie folgt problemlos in einen Blob konvertieren können:
var dataView = new DataView(arrayBuffer);
var blob = new Blob([dataView], { type: mimeString });
Die Frage, die ich jetzt habe, ist, ob es möglich ist, von einem Blob zu einem ArrayBuffer zu wechseln.
javascript
blob
arraybuffer
Jeanluca Scaljeri
quelle
quelle
Blob
können nicht direkt gelesen werden, dies kann jedoch mit einigen APIs erfolgen.Antworten:
Die
Response
API verwendet eine (unveränderliche),Blob
von der die Daten auf verschiedene Arten abgerufen werden können. Das OP hat nur darum gebetenArrayBuffer
, und hier ist eine Demonstration davon.alternativ können Sie dies verwenden:
quelle
Blob.arrayBuffer()
der selbst im Jahr 2020 eine recht schlechte Kompatibilität aufweist: caniuse.com/#feat=mdn-api_blob_arraybuffer oder developer.mozilla.org/en-US/docs/Web/API/Blob/arrayBufferSie können
FileReader
dasBlob
als lesenArrayBuffer
.Hier ist ein kurzes Beispiel:
Hier ist ein längeres Beispiel:
Dies wurde in der Konsole von Chrome 27—69, Firefox 20—60 und Safari 6—11 getestet.
Hier ist auch eine Live-Demonstration, mit der Sie spielen können: https://jsfiddle.net/potatosalad/FbaM6/
Update 2018-06-23: Danke an Klaus Klein für den Tipp über
event.target.result
versusthis.result
Referenz:
quelle
this
.<EventTarget>.result
sollte das beheben!Nur um die Antwort von Herrn @potatosalad zu ergänzen.
Sie nicht wirklich brauchen , um die Funktion für den Zugriff auf Umfang das Ergebnis auf dem bekommen onload Rückruf, können Sie die folgende auf den frei machen Ereignisparameter:
Warum ist das besser? Denn dann können wir die Pfeilfunktion verwenden, ohne den Kontext zu verlieren
quelle
Oder Sie können die Abruf-API verwenden
Ich weiß nicht, was der Leistungsunterschied ist, und dies wird auch auf Ihrer Netzwerkregisterkarte in DevTools angezeigt.
quelle
new Response(blob).arrayBuffer()
Es gibt jetzt (Chrome 76+ & FF 69+) eine Blob.prototype.arrayBuffer () -Methode, die ein Versprechen zurückgibt, das mit einem ArrayBuffer aufgelöst wird, der die Daten des Blobs darstellt.
quelle