javascript - tab - So legen Sie einen Dateinamen mit window.open fest




window.open parameter (3)

Ich versuche, das von JavaScript berechnete temporäre Ergebnis herunterzuladen. data.csv , ich habe eine Zeichenfolge str . Ich möchte eine Datei herunterladen, die str enthält und als data.csv wurde. Ich verwende den folgenden Code:

window.open('data:text/csv;charset=utf-8,' + str);

Die Datei kann erfolgreich heruntergeladen werden, aber wie kann ich die Datei data.csv automatisch data.csv , anstatt den Namen jedes Mal data.csv ?


Das funktioniert nicht im neuesten Chrome, ich habe das geändert und der folgende Code wird gut funktionieren,

    $("#download_1").click(function() {
    var json_pre = '[{"Id":1,"UserName":"Sam Smith"},{"Id":2,"UserName":"Fred Frankly"},{"Id":1,"UserName":"Zachary Zupers"}]';
    var json = $.parseJSON(json_pre);

    var csv = JSON2CSV(json);
    var downloadLink = document.createElement("a");
    var blob = new Blob(["\ufeff", csv]);
    var url = URL.createObjectURL(blob);
    downloadLink.href = url;
    downloadLink.download = "data.csv";

    document.body.appendChild(downloadLink);
    downloadLink.click();
    document.body.removeChild(downloadLink);
});

Wenn Sie also auf den Download-ID-Button klicken, wird ein unsichtbarer Download-Link erstellt und darauf geklickt. Ich habe eine andere Funktion verwendet, um js vorzubereiten.

Die JSON2CSV-Funktion lautet wie folgt:

function JSON2CSV(objArray) {
    var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
    var str = '';
    var line = '';

    if ($("#labels").is(':checked')) {
        var head = array[0];
        if ($("#quote").is(':checked')) {
            for (var index in array[0]) {
                var value = index + "";
                line += '"' + value.replace(/"/g, '""') + '",';
            }
        } else {
            for (var index in array[0]) {
                line += index + ',';
            }
        }

        line = line.slice(0, -1);
        str += line + '\r\n';
    }

    for (var i = 0; i < array.length; i++) {
        var line = '';

        if ($("#quote").is(':checked')) {
            for (var index in array[i]) {
                var value = array[i][index] + "";
                line += '"' + value.replace(/"/g, '""') + '",';
            }
        } else {
            for (var index in array[i]) {
                line += array[i][index] + ',';
            }
        }

        line = line.slice(0, -1);
        str += line + '\r\n';
    }
    return str;
}

Hoffe es wird anderen helfen :)


Dies erreichen Sie mit dem download Attribut für <a> -Elemente. Zum Beispiel:

<a href="1251354216241621.txt" download="your-foo.txt">Download Your Foo</a>

Dieses Attribut gibt an, dass die Datei heruntergeladen werden muss (und nicht angezeigt wird, falls zutreffend), und gibt an, welcher Dateiname für die heruntergeladene Datei verwendet werden soll.

Anstelle von window.open() Sie einen unsichtbaren Link mit dem download Attribut und .click() .

var str = "Name, Price\nApple, 2\nOrange, 3";
var uri = 'data:text/csv;charset=utf-8,' + str;

var downloadLink = document.createElement("a");
downloadLink.href = uri;
downloadLink.download = "data.csv";

document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);

Leider wird dies nicht von allen Browsern unterstützt, aber das Hinzufügen macht es für andere Browser nicht schlimmer: Sie werden weiterhin die Dateien mit nutzlosen Dateinamen herunterladen. (Dies setzt voraus, dass Sie einen MIME-Typ verwenden, dessen Browser versucht, einen Download durchzuführen. Wenn Sie versuchen, den Benutzer eine .html Datei herunterladen zu lassen, anstatt sie anzuzeigen, ist dies bei nicht unterstützten Browsern nicht von Nutzen. )


Eine kürzere Version der akzeptierten (für meinen Fall musste Unicode verwendet werden)

var link = document.createElement("a");
link.href = 'data:text/csv,' + encodeURIComponent("algún texto");
link.download = "Example.csv";
link.click();




window.open