2014-04-25 3 views
22

J'ai le code Javascript suivant pour exporter le fichier CSV sur le côté client. Cependant, Google Chrome se bloque chaque fois que j'essaie d'exporter un grand tableau. Quelle est la limite de la chaîne de données autorisée dans Chrome? Est-il possible qu'il atteigne la limite de mémoire autorisée dans Chrome? Si la chaîne de données est trop longue pour Chrome, comment vais-je exporter de gros fichiers CSV côté client?Javascript: Exportation de gros fichiers texte/csv crash 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(); 

(taille du fichier attendu est d'environ 6.4MB)

Répondre

38

eu le même problème et a résolu le problème en utilisant Blob.

Par exemple:

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

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

+0

J'ai un problème similaire, ce qui est d'écrire des données de fichiers .xlsx créés par la fonction 'EB.createFile()' de excelbuilder.js. Lorsqu'il a plus de 8000 enregistrements dans la table, le navigateur plante. J'essaye de le sauver comme un blob. Cependant, ce qui est écrit dans le fichier s'avère être la chaîne base64 plutôt que les données du fichier Excel. J'ai essayé différentes chaînes de caractères. Avez-vous une idée? – gm2008

3

J'ai utilisé la fonction ci-dessous pour télécharger CSV. A travaillé pour moi dans 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

Est-ce compatible avec Safari? @Ganesh –

+0

N'a pas testé cela avec Safari. – Ganesh