Bạn có thể sử dụng FileReader
để đọc Blob
làm ArrayBuffer
.
Edit: gia tăng một phiên bản ngắn:
var arrayBuffer;
var fileReader = new FileReader();
fileReader.onload = function() {
arrayBuffer = this.result;
};
fileReader.readAsArrayBuffer(blob);
Dưới đây là một ví dụ nữa:
// 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(progressEvent) {
arrayBufferNew = this.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
này đã được thử nghiệm trong giao diện điều khiển của Chrome 27, Firefox 20 và Safari 6.
Đây cũng là bản trình diễn trực tiếp mà bạn có thể chơi với: http://jsfiddle.net/potatosalad/FbaM6/
tham khảo:
điều này dường như không có nhiều mã .. cho một điều đơn giản? –
@HenleyChiu Tôi đã chỉnh sửa câu trả lời để bao gồm một phiên bản ngắn của mã. Ví dụ dài hơn được dự định là hoàn toàn khép kín (cho thấy cách tạo ArrayBuffer, Blob và ngược lại). Tôi đã không thể tìm thấy một cách đồng bộ để đọc một Blob mà không sử dụng [Web Worker] (http://dev.w3.org/html5/workers/) và [FileReaderSync] (https: //developer.mozilla .org/en-US/docs/Web/API/FileReaderSync). – potatosalad
Một số người thực sự muốn chứng minh địa ngục gọi lại tồn tại. Nó có ý nghĩa đối với các đốm màu LARGE, nhưng đối với các trường hợp sử dụng bình thường, JavaScript nên cung cấp một phương thức đồng bộ. – lama12345