Wenn Sie zum Beispiel dem Link folgen:
data:application/octet-stream;base64,SGVsbG8=
Der Browser fordert Sie auf, eine Datei herunterzuladen, die aus den Daten besteht, die im Hyperlink selbst als base64 gespeichert sind. Gibt es eine Möglichkeit, einen Standardnamen im Markup vorzuschlagen? Wenn nicht, gibt es eine JavaScript-Lösung?
data:application/pdf;name=document.pdf;base64,BASE64_DATA_ENCODED
Antworten:
Verwenden Sie das
download
Attribut:Live - Beispiel auf html5-demos.appspot.com / ... .
Funktioniert derzeit auf Chrome, Firefox, Edge, Opera und Desktop Safari, jedoch nicht auf iOS Safari oder IE11.
quelle
window.location.replace
. Wenn Sie beispielsweise Daten erstellen möchten: uri oder eine, die von generiert wurdewindow.URL.createObjectURL
, und diese als Datei herunterladen möchten , müssen Sie eine <a> erstellen und darauf klicken: jsfiddle.net/flyingsheep/wpQtH (nein,$(...).click()
funktioniert nicht)$('<a href="data:text/plain,Test" download="test.txt">')[0].click()
scheint hier gut zu funktionieren (Chrome 23) (Hinweis: Ich habe die nativeclick
Methode verwendet , nicht die von jQuery). Demo: jsfiddle.net/2zsRWChrome macht dies heutzutage sehr einfach:
quelle
Nur HTML: Verwenden Sie das
download
Attribut:Nur Javascript: Mit diesem Code können Sie jeden Daten-URI speichern:
Chrome, Firefox und Edge 13+ verwenden den angegebenen Dateinamen.
IE11, Edge 12 und Safari 9 (die das
download
Attribut nicht unterstützen ) laden die Datei mit ihrem Standardnamen herunter oder zeigen sie einfach auf einer neuen Registerkarte an, wenn es sich um einen unterstützten Dateityp handelt: Bilder, Videos, Audiodateien ,…quelle
downloadjs
amdata:
URI, was in der Frage erwähnt wird. Diese Antwort funktioniert auch mit Blobs und was auch immer sonst hat eine URILaut RFC 2397 gibt es keine.
Es scheint auch kein Attribut des<a>
Elements zu geben, das Sie verwenden können.HTML5 hat jedoch später das
download
Attribut für das<a>
Element eingeführt, obwohl die Unterstützung zum Zeitpunkt des Schreibens nicht universell ist (z. B. keine MSIE-Unterstützung).quelle
Ich habe ein bisschen in Firefox-Quellen in netwerk / protocol / data / nsDataHandler.cpp gesucht
Der Datenhandler analysiert nur Inhalt / Typ und Zeichensatz und prüft, ob die Zeichenfolge "; base64" enthält
Der RFC gibt keinen Dateinamen an und zumindest Firefox verarbeitet keinen Dateinamen dafür. Der Code generiert einen zufälligen Namen plus ".part".
Ich habe auch das Firefox-Protokoll überprüft
interessante Dateien, wenn Sie sich Mozilla-Quellen ansehen möchten:
Ich denke, Sie können vorerst aufhören, nach einer Lösung zu suchen, weil ich vermute, dass es keine gibt :)
Wie in diesem Thread bemerkt, hat HTML5 ein
download
Attribut, es funktioniert auch unter Firefox 20 http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-downloadquelle
Das folgende Javascript-Snippet funktioniert in Chrome, indem das neue Download-Attribut von Links verwendet und ein Klick simuliert wird.
Das folgende Beispiel zeigt die Verwendung:
quelle
Nein.
Der gesamte Zweck besteht darin, dass es sich um einen Datenstrom handelt, nicht um eine Datei. Die Datenquelle sollte keine Kenntnisse über den Benutzeragenten haben, der sie als Datei behandelt ... und dies ist nicht der Fall.
quelle
data:
besteht darin, einen Block interner Daten in das URL-Format zu verschieben, ohne ihn aus einer protokollbasierten Quelle lesen zu müssen . Der Link in der Antwort von @ silex zeigt, dass die Möglichkeit, einen bevorzugten Namen zum Schreiben vorzuschlagen , als nützlich angesehen wird, auch wenn er noch nicht implementiert ist.data:
wurde speziell erfunden, um zu ermöglichen, dass (kleine) Inline- Inhalte in einem zusammengewürfelten URL-Format angezeigt werden, sodass sie beispielsweise von Bild-Tags ohne separate HTTP-Anforderung verwendet werden können. HTML sagt, dass der Inhalt einesimg src
Attributs eine URL sein muss, also hat RFC 2397 das erstellt. Es gibt keine "Datenquelle".Sie können dem Ankerelement ein Download-Attribut hinzufügen.
Stichprobe:
quelle
Schauen Sie sich diesen Link an: http://lists.w3.org/Archives/Public/uri/2010Feb/0069.html
Zitat:
Es gibt auch einige Informationen in den restlichen Nachrichten der Diskussion.
quelle
Mit Servicemitarbeitern ist dies endlich im wahrsten Sinne des Wortes möglich.
<a href, <img src
window.open (url), absolut alles, was mit einer "echten" URL möglich ist.Der Browser schlägt jetzt myPrettyName.jpg vor, auch wenn der Benutzer die Datei in einem neuen Tab öffnet und versucht, sie dort zu speichern. Es wird genau so sein, als ob die Datei vom Server gekommen wäre.
quelle
Es gibt ein kleines Problemumgehungsskript in Google Code, das für mich funktioniert hat:
http://code.google.com/p/download-data-uri/
Es fügt ein Formular mit den darin enthaltenen Daten hinzu, sendet es und entfernt das Formular erneut. Hacky, aber es hat den Job für mich gemacht. Benötigt jQuery.
Dieser Thread wurde in Google vor der Google-Codepage angezeigt, und ich dachte, es könnte hilfreich sein, den Link auch hier zu haben.
quelle
data:...
, dass dieses Skript , anstatt es dem Benutzer über einen URI zu präsentieren, ein Formular erstellt, um es an den Server zu senden. Und der Server gibt es dann vermutlich direkt als HTTP-Download-Antwort zurück (dh mit einem entsprechenden Content-Disposition-Header, der den Dateinamen angibt).Hier ist eine jQuery-Version, die auf Holfs Version basiert und mit Chrome und Firefox funktioniert, während seine Version nur mit Chrome zu funktionieren scheint. Es ist ein wenig seltsam, dem Körper etwas hinzuzufügen, um dies zu tun, aber wenn jemand eine bessere Option hat, bin ich alles dafür.
quelle
$().appendTo()
variable.click(); variable.remove()
[0]
von jedem "jQuery-Element" das erste DOM-Element zurückgeben sollte, das es darstellt, was Sie im Wesentlichen aus jQuery "herausholt".Es ist irgendwie hackisch, aber ich war schon einmal in der gleichen Situation. Ich habe dynamisch eine Textdatei in Javascript generiert und wollte sie zum Download bereitstellen, indem ich sie mit dem Daten-URI codierte.
Dies ist mit
geringfügigengrößeren Benutzereingriffen möglich . Generieren Sie einen Link<a href="data:...">right-click me and select "Save Link As..." and save as "example.txt"</a>
. Wie gesagt, das ist unelegant, aber es funktioniert, wenn Sie keine professionelle Lösung benötigen.Dies könnte weniger schmerzhaft sein, wenn Sie den Namen zuerst mit Flash in die Zwischenablage kopieren. Wenn Sie sich Flash oder Java erlauben lassen (jetzt mit immer weniger Browser-Unterstützung, denke ich?), Könnten Sie wahrscheinlich einen anderen Weg finden, dies zu tun.
quelle
download
Attribut angeben , um einen Namen vorzuschlagen, wie in vielen anderen Antworten erwähnt .Dieser funktioniert mit Firefox 43.0 (älter nicht getestet):
dl.js:
dl.html
Wenn Sie auf die Schaltfläche klicken, wird eine Datei mit dem Namen hello.bin zum Download angeboten. Trick ist, Datei anstelle von Blob zu verwenden .
Referenz: https://developer.mozilla.org/de/docs/Web/API/File
quelle
quelle
Sie können dies tatsächlich in Chrome und FireFox erreichen.
Versuchen Sie die folgende URL, um den verwendeten Code herunterzuladen.
quelle