我目前正在研究用二进制数据读取部分XHR响应的可能性。我们当前的方法基于'responseText'属性和base64编码。显然,这远非最佳。
我们如何使用XHR读取部分Blob / ArrayBuffer响应?当我在Chrome中尝试时,整个ArrayBuffer / Blob在readyState = 4时可用,但在此之前不可用。
总结一下,在我看来:
我在这里遗漏了什么吗?我们可以采取什么方法来阅读部分二元响应?
答案 0 :(得分:5)
有一种方法,虽然它还不标准。 Firefox允许您将XHR上的responseType
设置为“moz-blob”,“moz-chunked-text”或“moz-chunked-arraybuffer”,具体取决于哪一个适合您。然后,当您收听progress
事件时,您将能够访问部分数据.MDN有关于here和here的更多信息。
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。