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