Javascript XHR2文件传输。在“progress”事件处理程序期间访问二进制数据

Javascript XHR2文件传输。在“progress”事件处理程序期间访问二进制数据,javascript,html,xmlhttprequest,blob,Javascript,Html,Xmlhttprequest,Blob,我能够执行分块的XHR请求,获取范围头指定的文件片段。但是,当使用单个XHR请求一次下载整个文件时,文件传输可能总是更快,而不是使用各自的XHR请求实现获取的块 我想知道的是,如果我开始直接下载,有没有办法在下载完成之前访问正在下载的二进制数据?有一个progress处理程序,它报告当前下载的总大小和数量。有没有办法访问全部或部分已下载的数据 基本上,随着传输的进行,我需要能够将文件分解成块并对其执行操作。我不能等到下载完成后再这样做。我还需要尽可能快的下载,这就是分块机制不理想的原因,它似乎总

我能够执行分块的XHR请求,获取
范围
头指定的文件片段。但是,当使用单个XHR请求一次下载整个文件时,文件传输可能总是更快,而不是使用各自的XHR请求实现获取的块

我想知道的是,如果我开始直接下载,有没有办法在下载完成之前访问正在下载的二进制数据?有一个
progress
处理程序,它报告当前下载的总大小和数量。有没有办法访问全部或部分已下载的数据


基本上,随着传输的进行,我需要能够将文件分解成块并对其执行操作。我不能等到下载完成后再这样做。我还需要尽可能快的下载,这就是分块机制不理想的原因,它似乎总是会变慢。

您可以使用
xhr.response
xhr.responseText
暂时获得响应它仅适用于文本数据。

例如:

var xhr = new XMLHttpRequest();
xhr.addEventListener("progress", function (){  //could be .onprogress also
    console.log(xhr.response);
});
xhr.open(someMethod, someUrl);
xhr.send();
重要提示:
.response
包含完整的响应,而不是自上次进度事件以来加载的部分


对于二进制数据,有
moz blob
moz chunked arraybuffer
responseType,但它没有标准化

不过,这只适用于文本,OP询问了二进制数据。是的,我正在下载大量的二进制数据。当我记录
xhr.response
e.response
时(
e
进程
回调处理程序中传递的参数)。我分别得到
null
undefined
——直到最后一次回调(当文件传输完成时),此时
xhr.response
变成
Blob
。因此,在传输过程中获取二进制数据不起作用。@Musa,为什么你认为这只是用于文本?我测试了图片您的示例使用文本,而不考虑文件类型。将responseType设置为blob或arraybuffer以使用二进制数据。对于我来说,Chrome中的responseType仅适用于文本responseType。尝试设置blob或arraybuffer时,xhr.response未定义。