8

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

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

总而言之,在我看来:

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

我在这里错过了什么吗?我们可以采取什么方法来读取部分二进制响应?

4

3 回答 3

5

有一种方法,虽然它还不是标准的。Firefox 允许您将responseTypeXHR 设置为“moz-blob”、“moz-chunked-text”或“moz-chunked-arraybuffer”,具体取决于哪一个适合您。然后,当您监听progress事件时,您将能够访问传入的部分数据。MDN 在此处此处有更多信息。

Chrome 将支持Streams API,但还没有准备好。Firefox 也可能最终支持它。我在某个地方读到了 IE 已经做过的事情,尽管我似乎找不到任何官方文档来证实这一点。

于 2013-10-31T02:16:49.393 回答
5

请密切注意Firefox 和 Chrome目前支持的 fetch API

于 2015-12-16T04:37:15.973 回答
1

用作 XHR 替代品的最佳 API 是 fetch with 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

于 2017-12-12T16:44:36.570 回答