可能的二进制数据的部分XHR响应读数?

时间:2013-09-23 02:12:47

标签: javascript stream binary xmlhttprequest arraybuffer

我目前正在研究用二进制数据读取部分XHR响应的可能性。我们当前的方法基于'responseText'属性和base64编码。显然,这远非最佳。

我们如何使用XHR读取部分Blob / ArrayBuffer响应?当我在Chrome中尝试时,整个ArrayBuffer / Blob在readyState = 4时可用,但在此之前不可用。

总结一下,在我看来:

  • 读取XHR的responseText属性:可以在readyState = 4之前读取响应,并且我们可以将base64编码的二进制数据流回客户端
  • 使用responseType ='arraybuffer'读取XHR的响应属性:没有部分响应读取,但是当readyState = 4时整个缓冲区可用

我在这里遗漏了什么吗?我们可以采取什么方法来阅读部分二元响应?

3 个答案:

答案 0 :(得分:5)

有一种方法,虽然它还不标准。 Firefox允许您将XHR上的responseType设置为“moz-blob”,“moz-chunked-text”或“moz-chunked-arraybuffer”,具体取决于哪一个适合您。然后,当您收听progress事件时,您将能够访问部分数据.MDN有关于herehere的更多信息。

Chrome会支持Streams API,但它是not ready yet。 Firefox也可以eventually支持它。我已经读过IE已经存在的地方,虽然我似乎无法找到任何官方文档来确认。

答案 1 :(得分:5)

答案 2 :(得分:1)

用作XHR替换的最佳API是使用readableStream获取。

这里解释如下: https://developers.google.com/web/fundamentals/primers/async-functions#example_streaming_a_response

Chrome已经支持它了。 Firefox实现了它,但它必须暂时手动激活(默认情况下将在未来版本中激活)。 在等待此激活时,Firefox使用非标准响应类型moz-chunked-arraybuffer实现XHR

https://www.npmjs.com/package/fetch-readablestream提出了一个实现这两种方法的API。它使用https://www.npmjs.com/package/web-streams-polyfill