Bạn có thể sử dụng FileReader
để đọc Blob
như một ArrayBuffer
.
Đây là một ví dụ ngắn gọn:
var arrayBuffer;
var fileReader = new FileReader();
fileReader.onload = function(event) {
arrayBuffer = event.target.result;
};
fileReader.readAsArrayBuffer(blob);
Đây là một ví dụ dài hơn:
// ArrayBuffer -> Blob
var uint8Array = new Uint8Array([1, 2, 3]);
var arrayBuffer = uint8Array.buffer;
var blob = new Blob([arrayBuffer]);
// Blob -> ArrayBuffer
var uint8ArrayNew = null;
var arrayBufferNew = null;
var fileReader = new FileReader();
fileReader.onload = function(event) {
arrayBufferNew = event.target.result;
uint8ArrayNew = new Uint8Array(arrayBufferNew);
// warn if read values are not the same as the original values
// arrayEqual from: http://stackoverflow.com/questions/3115982/how-to-check-javascript-array-equals
function arrayEqual(a, b) { return !(a<b || b<a); };
if (arrayBufferNew.byteLength !== arrayBuffer.byteLength) // should be 3
console.warn("ArrayBuffer byteLength does not match");
if (arrayEqual(uint8ArrayNew, uint8Array) !== true) // should be [1,2,3]
console.warn("Uint8Array does not match");
};
fileReader.readAsArrayBuffer(blob);
fileReader.result; // also accessible this way once the blob has been read
Điều này đã được thử nghiệm trong bảng điều khiển của Chrome 27—69, Firefox 20—60 và Safari 6—11.
Đây cũng là phần trình diễn trực tiếp mà bạn có thể chơi: https://jsfiddle.net/potatosalad/FbaM6/
Cập nhật 2018-06-23: Cảm ơn Klaus Klein về mẹo về event.target.result
so vớithis.result
Tài liệu tham khảo:
Blob
không thể được đọc trực tiếp nhưng nó có thể được thực hiện với một số API.