2014-04-25 3 views
22

Ho il seguente codice Javascript per esportare il file CSV sul lato client. Tuttavia Google Chrome si blocca ogni volta che provo ad esportare un array di grandi dimensioni. Qual è il limite della stringa di dati consentita in Chrome? È possibile che stia colpendo il limite di memoria consentito in Chrome? Se la stringa di dati è troppo lunga per Chrome, come procederò nell'esportazione di file CSV di grandi dimensioni sul lato client?Javascript: esportazione di testo di grandi dimensioni/file csv si blocca Google Chrome

var csvRows = [...]; //Array with 40000 items, each item is 100 characters long. 

var csvString = csvRows.join("\r\n"); 

var a = document.createElement('a'); 

a.href  = 'data:text/csv;charset=utf-8,' + encodeURIComponent(csvString); 
a.target  = '_blank'; 
a.download = 'export.csv'; 

document.body.appendChild(a); 
a.click(); 

(dimensione del file prevista è di circa 6.4MB)

risposta

38

avuto lo stesso problema e risolto utilizzando Blob.

Ad esempio:

csvData = new Blob([csvString], { type: 'text/csv' }); 
var csvUrl = URL.createObjectURL(csvData); 
a.href = csvUrl; 

Fonte: https://stackoverflow.com/a/24611096/3048937

+0

Ho un problema simile, che è quello di scrivere i dati del file .xlsx creati dalla funzione di excelbuilder.js 'EB.createFile()'. Quando ha 8000+ record nella tabella, il browser si blocca. Sto cercando di salvarlo come un blob. Tuttavia, ciò che è scritto nel file risulta essere la stringa base64 piuttosto che i dati del file excel. Ho provato diversi tipi di stringhe. Hai qualche idea? – gm2008

3

ho usato seguente funzione per scaricare CSV. Ha lavorato per me in IE/Firefox/Chrome

function downloadFile(data, fileName) { 
     var csvData = data; 
     var blob = new Blob([ csvData ], { 
      type : "application/csv;charset=utf-8;" 
     }); 

     if (window.navigator.msSaveBlob) { 
      // FOR IE BROWSER 
      navigator.msSaveBlob(blob, fileName); 
     } else { 
      // FOR OTHER BROWSERS 
      var link = document.createElement("a"); 
      var csvUrl = URL.createObjectURL(blob); 
      link.href = csvUrl; 
      link.style = "visibility:hidden"; 
      link.download = fileName; 
      document.body.appendChild(link); 
      link.click(); 
      document.body.removeChild(link); 
     } 
} 
+0

È compatibile con Safari? @Ganesh –

+0

Non ho provato questo con Safari. – Ganesh