En mi página web, tengo el siguiente código JS para descargar el archivo del servidor al hacer clic en el usuario:
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); Funciona para archivos de menos de 1 GB de tamaño. El problema que encontré ocurre cuando el tamaño del archivo que intento descargar es de aproximadamente 3 GB. En este caso, el método onprogress funciona como con otros archivos, el método onload se invoca una vez que se completa la descarga, pero oReq.response=null . También puedo guardar el archivo, pero su tamaño es de 1 KB.
¿Podría, por favor, darme algún consejo de por qué sucede esto? ¿Alguna forma alternativa de hacer esto?
¿Algún consejo por qué sucede esto?
Probablemente porque el navegador se queda sin memoria cuando le pide que cree una URL de objeto para un objeto de ese tamaño.
¿Alguna forma alternativa de hacer esto?
No use AJAX, sino que envíe un formulario con method="post" para enviar los parámetros que necesite para esto.