使用XMLHttpRequest不能滿足我所有的請求。但是,通過一些技巧,我可以在它到達後讀取塊二進制數據。一般來說,重寫minetype爲'text/plain; charset = x-user-defined',它將二進制數據以文本的形式進行流式處理,一旦一個包準備就緒,我就可以得到它並將其轉換爲arrayBuffer。
var xhr = new XMLHttpRequest();
var streamOffset = 0;
xhr.overrideMimeType('text/plain; charset=x-user-defined');
xhr.open("GET", url, true);
xhr.send();
xhr.onreadystatechange = function() {
var textBuffer = xhr.responseText;
var arrayBuffer = textToArrayBuffer(textBuffer, streamOffset);
}
function textToArrayBuffer(textBuffer, startOffset) {
var len = textBuffer.length - startOffset;
var arrayBuffer = new ArrayBuffer(len);
var ui8a = new Uint8Array(arrayBuffer, 0);
for (var i = 0, j = startOffset; i < len; i++, j++)
ui8a[i] = (textBuffer.charCodeAt(j) & 0xff);
return arrayBuffer;
}
雖然這樣我就可以以流方式獲取二進制數據,但是在處理每個塊之後不能丟棄,直到請求完成。無論如何,這給了我一旦到達二進制數據的機會。
你有沒有遇到過這種情況?目前我正在處理類似的問題。 –
@NickJennings看到我的答案在下面,雖然它不是一個完整的解決方案,它可以滿足我的一些需求。 –