descarga del file encodeURI – locking del browser

Creé una aplicación web para limpiar datos CSV / TSV. La aplicación me permite cargar un file CSV, leerlo, corregir datos y luego download un nuevo file CSV con los datos correctos. Un desafío que me he encontrado es download files con más de ~ 2500 líneas. El browser se bloquea con el siguiente post de error:

"Aw, Snap! Something went wrong while displaying this webpage..." 

Para solucionar este problema, he cambiado la progtwigción para download varios files CSV que no excedan las 2500 líneas hasta que se descarguen todos los datos. Luego, juntaría los files CSV descargados en un file final. Esa no es la solución que estoy buscando. Al trabajar con files de más de 100.000 líneas, necesito download todo el contenido en 1 file y no en 40. También necesito una solución de interfaz.

A continuación se muestra el código para download el file CSV. Estoy creando un enlace oculto, codificando el contenido de la matriz de datos (cada elemento tiene 1000 líneas) y creando la ruta para el enlace oculto. Luego hago clic en el enlace para iniciar la descarga.

 var startDownload = function (data){ var hiddenElement = document.createElement('a'); var path = 'data:attachment/tsv,'; for (i=0;i<data.length;i++){ path += encodeURI(data[i]); } hiddenElement.href = path; hiddenElement.target = '_blank'; hiddenElement.download = 'result.tsv'; hiddenElement.click(); } 

En mi caso, el process anterior funciona para ~ 2500 líneas a la vez. Si bash download files más grandes, el browser se bloquea. ¿Qué estoy haciendo mal y cómo puedo download files más grandes sin bloquear el browser? El file que está bloqueando el browser tiene (12,000 filas por 48 columnas)

ps. Estoy haciendo todo esto en Google Chrome, que permite la carga de files. Entonces la solución debería funcionar en Chrome.

He experimentado este problema antes y la solución que encontré fue usar Blobs para download el CSV. Esencialmente, usted convierte los datos csv en un Blob, luego utiliza la URL API para crear una URL para usar en el enlace, por ejemplo:

 var blob = new Blob([data], { type: 'text/csv' }); var hiddenElement = document.createElement('a'); hiddenElement.href = window.URL.createObjectURL(blob); 

Blobs no son compatibles con IE9 , pero si solo necesitas compatibilidad con Chrome, estarás bien.

También me enfrenté al mismo problema. Usé este código, funcionará bien. También puedes probar esto.

 if (window.navigator.msSaveBlob) { window.navigator.msSaveBlob(new Blob([base64toBlob($.base64.encode(excelFile), 'text/csv')]),'data.csv'); } else { var link = document.createElement('a'); link.download = 'data.csv'; // If u use chrome u can use webkitURL in place of URL link.href = window.URL.createObjectURL(new Blob([base64toBlob($.base64.encode(excelFile), 'text/csv')])); link.click(); }