2013-05-04 19 views
5

Ich verwende ein Plugin, um eine CSV-Datei aus einer Tabelle zu generieren, wird die Datei mit einem "Download" -Dateiname heruntergeladen, wie kann ich den Dateinamen ändern z. dowload.csv alsJavascript: set filename zum herunterladen

var csv = $("#table").table2CSV({delivery:'download'}); 
window.location.href = 'data:text/csv;charset=UTF-8,'+ encodeURIComponent(csv); 

Antwort

27

Ich schrieb ein Werkzeug, das Sie eine Datei in den Download-Ordner auf dem lokalen Computer speichern mit einem benutzerdefinierten Dateinamen verwenden können, wenn das auf dem Client-Maschine möglich ist.

Zum Zeitpunkt des Schreibens benötigen Sie Chrome, Firefox oder IE10 für diese spezifische Funktion, aber dieses Tool greift auf einen nicht benannten Download zurück, wenn das alles verfügbar ist, da etwas besser ist als nichts ...

für Ihren Einsatz:

und den magischen Code:

function download(strData, strFileName, strMimeType) { 
    var D = document, 
     a = D.createElement("a"); 
     strMimeType= strMimeType || "application/octet-stream"; 


    if (navigator.msSaveBlob) { // IE10 
     return navigator.msSaveBlob(new Blob([strData], {type: strMimeType}), strFileName); 
    } /* end if(navigator.msSaveBlob) */ 


    if ('download' in a) { //html5 A[download] 
     a.href = "data:" + strMimeType + "," + encodeURIComponent(strData); 
     a.setAttribute("download", strFileName); 
     a.innerHTML = "downloading..."; 
     D.body.appendChild(a); 
     setTimeout(function() { 
      a.click(); 
      D.body.removeChild(a); 
     }, 66); 
     return true; 
    } /* end if('download' in a) */ 


    //do iframe dataURL download (old ch+FF): 
    var f = D.createElement("iframe"); 
    D.body.appendChild(f); 
    f.src = "data:" + strMimeType + "," + encodeURIComponent(strData); 

    setTimeout(function() { 
     D.body.removeChild(f); 
    }, 333); 
    return true; 
} /* end download() */ 

Update: hinzugefügt Zukunft beständige IE Routine

update2: Überprüfung the evolved version on GitHub, die DataURL und Blob-Unterstützung enthält.

+1

Sieht gut aus, aber dies unterstützt keinen Browser vor 2012. Ich denke, das ist das Beste, was wir mit clientseitigem Download machen können. – styfle

+0

Tatsächlich funktioniert das DataURL-Fallback auf ziemlich alten Kopien von Firefox und mit einigen Work-Around-fähigen Pantomime-Problem auf älteren Chromes. Ich habe die Funktion jahrelang benutzt, bevor ich den IE10 und eine [Download] -Funktion letztes Jahr hinzugefügt habe ... – dandavis

+1

'BlobBuilder' ist veraltet. Bitte bearbeiten Sie Ihre Antwort, um stattdessen den 'Blob'-Konstruktor zu verwenden. –