大文件下载
Big size file download
在我的网页上,我有以下 JS 代码用于在用户单击时从服务器下载文件:
var oReq = new XMLHttpRequest();
oReq.open("POST", otherUrl, true);
oReq.responseType = "arraybuffer";
oReq.onload = function(oEvent) {
var blob = new Blob([oReq.response],
{type: oReq.getResponseHeader('Content-Type')});
var objectURL = URL.createObjectURL(blob);
downloadLink.href = objectURL;
downloadLink.click();
};
oReq.onprogress = function(oEvent) {
var percentage = Math.round(oEvent.loaded/oEvent.total*100);
downloadProgressDiv.innerHTML = "Progress: " + percentage + " % (" + oEvent.loaded
+ " from " + oEvent.total + " )";
};
oReq.send(this.path);
它适用于 1GB 以下的文件。当我尝试下载的文件大小约为 3GB 时,我遇到了这个问题。在这种情况下,onprogress
方法与其他文件一样工作,onload
方法在下载完成后被调用,但是 oReq.response=null
。我也可以保存文件,但它的大小是 1KB。
请问您能告诉我为什么会发生这种情况吗?还有其他方法吗?
any tips why does this happens?
可能是因为浏览器内存不足,当您要求它为这样大小的对象创建一个对象时URL。
Any alternative ways of doing this?
不要使用 AJAX,而是提交一个带有 method="post"
的表单来发送您为此需要的任何参数。
在我的网页上,我有以下 JS 代码用于在用户单击时从服务器下载文件:
var oReq = new XMLHttpRequest();
oReq.open("POST", otherUrl, true);
oReq.responseType = "arraybuffer";
oReq.onload = function(oEvent) {
var blob = new Blob([oReq.response],
{type: oReq.getResponseHeader('Content-Type')});
var objectURL = URL.createObjectURL(blob);
downloadLink.href = objectURL;
downloadLink.click();
};
oReq.onprogress = function(oEvent) {
var percentage = Math.round(oEvent.loaded/oEvent.total*100);
downloadProgressDiv.innerHTML = "Progress: " + percentage + " % (" + oEvent.loaded
+ " from " + oEvent.total + " )";
};
oReq.send(this.path);
它适用于 1GB 以下的文件。当我尝试下载的文件大小约为 3GB 时,我遇到了这个问题。在这种情况下,onprogress
方法与其他文件一样工作,onload
方法在下载完成后被调用,但是 oReq.response=null
。我也可以保存文件,但它的大小是 1KB。
请问您能告诉我为什么会发生这种情况吗?还有其他方法吗?
any tips why does this happens?
可能是因为浏览器内存不足,当您要求它为这样大小的对象创建一个对象时URL。
Any alternative ways of doing this?
不要使用 AJAX,而是提交一个带有 method="post"
的表单来发送您为此需要的任何参数。