大文件下载

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" 的表单来发送您为此需要的任何参数。