667 Stimmen

Wie man einen Dateidownload auslöst, wenn man auf eine HTML-Schaltfläche oder JavaScript klickt

Dies ist verrückt, aber ich weiß nicht, wie man das macht, und aufgrund der Häufigkeit der Wörter ist es schwierig, das zu finden, was ich brauche, auf Suchmaschinen. Ich denke, das sollte eine einfache Frage sein.

Ich möchte einen einfachen Dateidownload, der das Gleiche macht wie dies:

Download!

Aber ich möchte einen HTML-Button verwenden, z.B. einen von diesen:

Download!

Ist es ebenfalls möglich, einen einfachen Download über JavaScript auszulösen?

$("#fileRequest").click(function(){ /* Code zum Herunterladen? */ });

Ich suche definitiv nicht nach einer Möglichkeit, einen Anchor zu erstellen, der wie ein Button aussieht, Backend-Skripte zu verwenden oder mit Server-Headern oder MIME-Typen herumzuspielen.

41 Stimmen

Dank Ihrer Hilfe "Wie man einen Dateidownload in JavaScript auslöst" würden Antworten viel schneller für zukünftige Suchende geben.

1 Stimmen

Deine Einschränkungen in deinem letzten Absatz machen für mich nicht viel Sinn. Wenn du offen für Antworten bist, die JavaScript verwenden (wie du sagst), oder die eine Änderung der DOM-Struktur erfordern (wie die, die du akzeptiert hast), warum dann nicht auch ein Anker, der als Button gestylt ist? Ich kann mir kein Szenario vorstellen, in dem die ersten beiden okay wären, aber der Anker als Button problematisch wäre.

26voto

Danubian Sailor Punkte 21985

Sie können es mit "Trick" mit unsichtbarem iframe machen. Wenn Sie "src" darauf setzen, reagiert der Browser, als ob Sie auf einen Link mit demselben "href" klicken würden. Im Gegensatz zur Lösung mit dem Formular ermöglicht es Ihnen, zusätzliche Logik einzubinden, z.B. die Aktivierung des Downloads nach Ablauf einer Zeitüberschreitung, wenn bestimmte Bedingungen erfüllt sind usw.

Es ist auch sehr still, es gibt kein Blinken eines neuen Fensters/Tab wie bei der Verwendung von window.open.

HTML:

Javascript:

function download() {
    var iframe = document.getElementById('invisible');
    iframe.src = "file.doc";
}

0 Stimmen

Es funktioniert zumindest, wenn Sie tatsächlich das iframe zum document.body hinzufügen.

2 Stimmen

Dies scheint derzeit nicht in Chrome zu funktionieren, obwohl es früher funktioniert hat. Ich frage mich, ob es irgendwie intermittierend in verschiedenen Versionen von Chrome aufhört zu funktionieren.

1 Stimmen

Funktioniert in Chrome ab Version 61.0.3163.100 (Offizieller Build) (64-Bit)

20voto

Apps-n-Add-Ons Punkte 1897

Bootstrap Version

  Download

Dokumentiert in den Bootstrap 4-Dokumenten und funktioniert auch in Bootstrap 3.

23 Stimmen

Das einzige, was damit zu tun hat, ist die Bootstrap-Klassenbezeichnungen, es ist einfach die Stärke von HTML5.

5 Stimmen

Die Frage fragt explizit, wie man dies mit einer Schaltfläche anstelle eines Links macht.

3 Stimmen

Wenn du überhaupt etwas über Bootstrap wüsstest, würdest du sehen, dass es sich tatsächlich um einen Button handelt.

19voto

Delconis Punkte 285

Ich denke, das ist die Lösung, nach der Sie gesucht haben

Herunterladen!

Ich hatte einen Fall, in dem mein Javascript eine CSV-Datei generiert hat. Da es keine Remote-URL zum Herunterladen gibt, verwende ich die folgende Implementierung.

downloadCSV: function(data){
    var MIME_TYPE = "text/csv";

    var blob = new Blob([data], {type: MIME_TYPE});
    window.location.href = window.URL.createObjectURL(blob);
}

0 Stimmen

Beim 404 -> Seite wird auf eine 404-Fehlerseite gewechselt. Dasselbe Problem wie bei den anderen location.href Lösungen angegeben.

1 Stimmen

Dies (zumindest die erste Implementierung) löst nicht unbedingt einen Download aus. Es führt einfach dazu, dass der Browser zu file.doc navigiert. Ob dies dazu führt, dass file.doc heruntergeladen oder im Browser als Seite angezeigt wird, hängt von den vom Server zurückgegebenen Headern ab, wenn er file.doc bereitstellt, und von den Dateitypen, die der Browser rendern kann.

11voto

Starwarswii Punkte 1777

Sie können den Download-Link ausblenden und den Button darauf klicken lassen.

Herunterladen!

1 Stimmen

Um dies in Firefox zu verwenden, muss die Ressource auf der gleichen Domain wie das Dokument liegen. Das Setzen von CORS-Headern hilft nicht.

5 Stimmen

Bitte tu das niemals

8voto

olli Punkte 1626

Was ist mit:

7 Stimmen

Das funktioniert nicht, wenn Ihre Datei beispielsweise ein Bild ist, da es einfach im Browser geöffnet würde.

0 Stimmen

Ein weiteres Problem tritt auf, wenn die Datei fehlt, wird die gesamte Seite zu einer 404-Seite navigiert.

1 Stimmen

Es funktioniert perfekt im Jahr 2020 (für jede Datei) und es ist die einfachste Lösung von allen. Unglaublich!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X