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.

650voto

Joe Pigott Punkte 7771

Sie können einen Download mit dem HTML5 download Attribut auslösen.

Download

Wo:

  • path_to_file ist ein Pfad, der zu einer URL auf dem gleichen Ursprung auflöst. Das bedeutet, die Seite und die Datei müssen die gleiche Domäne, Subdomain, das gleiche Protokoll (HTTP vs. HTTPS) und den gleichen Port (falls angegeben) teilen. Ausnahmen sind blob: und data: (die immer funktionieren) und file: (die nie funktioniert).
  • proposed_file_name ist der Dateiname zum Speichern. Wenn er leer ist, verwendet der Browser standardmäßig den Namen der Datei.

Dokumentation: MDN, HTML-Standard zum Herunterladen, HTML-Standard zu download, CanIUse

43 Stimmen

Funktioniert nicht mit Safari und bestimmten IE-Versionen

1 Stimmen

Gibt es einen JavaScript-Workaround, um die gleiche Funktionalität zu erreichen? Die verbleibenden Antworten replizieren nicht dasselbe Feature. Sie öffnen entweder ein neues Fenster oder verschieben sich zu einer anderen URL.

0 Stimmen

@AlexeyFShevelyov Der Link für caniuse ist bereits im Beitrag.

342voto

Cfreak Punkte 18773

Für den Button kannst du Folgendes tun:

   Herunterladen!

1 Stimmen

Sie können das Formulartag speichern und einfach ein onclick zum Buttontag hinzufügen.

0 Stimmen

Du könntest immer das Anker-Tag wie einen Button stylen!

19 Stimmen

Funktioniert nicht als Auslöser, sondern leitet einfach zur URL als 'a' Tag weiter.

143voto

Stefanos Chrs Punkte 1797

Ein einfache JS-Lösung:

function download(url) {
  const a = document.createElement('a')
  a.href = url
  a.download = url.split('/').pop()
  document.body.appendChild(a)
  a.click()
  document.body.removeChild(a)
}

63 Stimmen

@NicholasKyriakides Erinnert mich irgendwie an dieses Juwel: image.ibb.co/dtkUWJ/Selection_002.png

1 Stimmen

@BryanLarsen Welche Version von FF?

2 Stimmen

@BryanLarsen Du hast recht, Firefox erlaubt dies nicht, ohne das Element zuerst dem Körper hinzuzufügen. Danke, dass du die Antwort aktualisiert hast.

123voto

sleepyup Punkte 1281

HTML:

Herunterladen!

4 Stimmen

Was ist, wenn ich eine XML-Datei herunterladen möchte?

2 Stimmen

Vielen Dank für deinen Code. Ich habe es getestet und es funktioniert in IE, Chrome, Firefox.

16 Stimmen

Wenn Sie eine vom Browser akzeptierte Datei wie eine PDF haben, wird sie in einem neuen Tab geöffnet, anstatt den Download-Dialog anzuzeigen.

75voto

Matt Ball Punkte 343109

Mit jQuery:

$("#fileRequest").click(function() {
    // Hoffentlich setzt der Server Content-Disposition: Anhang!
    window.location = 'file.doc';
});

2 Stimmen

Perfekt, vielen Dank. Wissen Sie zufällig, ob die meisten Server standardmäßig die Content-Disposition auf 'Anhang' setzen?

8 Stimmen

Es gibt kein "meistens". Es kommt komplett darauf an. Verlass dich nicht darauf, dass es festgelegt ist.

3 Stimmen

Dieses Problem hat mich verrückt gemacht, und dies war die einzige Option, die funktioniert hat (und von IE unterstützt wird). Ich möchte anmerken, dass für jeden Anfänger wie mich, um den Content-Disposition festzulegen, alles was Sie tun müssen ist:

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