[英]Receive binary data in web browser from HTTP server in a streaming style
我正在尋找一個客戶端唯一的JavaScript解決方案,它可以以流媒體方式從HTTP服務器接收到我的Web客戶端的大型二進制文件,這樣一旦我獲得數據包而不必等待所有數據,我就可以立即響應它們加載到內存中,我甚至可以在處理每個數據后丟棄數據,以減少內存占用。
我在網上搜索,發現似乎不可能通過XMLHttpRequest,因為有兩個原因(引自本文 ),
我想知道這是否可以通過websocket實現,並且是否有任何好的開源已經解決了這個問題? 我找到了一些似乎相關的東西,例如Oboe.js和Binary.js ,但它要么應對JSON流,要么需要服務器端支持。
使用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;
}
雖然,通過這種方式,我可以以流方式獲取二進制數據,但在處理每個塊之后,它不能丟棄,直到請求完成。 無論如何,這讓我有機會在二進制數據到達時立即處理它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.