285 Stimmen

Gibt es einen Weg, um einen vorgeschlagenen Dateinamen anzugeben, wenn data: URI verwendet wird?

Wenn Sie beispielsweise dem Link folgen:

data:application/octet-stream;base64,SGVsbG8=

Der Browser wird Sie auffordern, eine Datei herunterzuladen, die aus den in der Verknüpfung selbst als Base64 gespeicherten Daten besteht. Gibt es eine Möglichkeit, einen Standardnamen im Markup vorzuschlagen? Wenn nicht, gibt es eine JavaScript-Lösung?

16voto

owencm Punkte 7645

Der folgende Javascript-Schnipsel funktioniert in Chrome, indem er das neue 'download'-Attribut von Links verwendet und einen Klick simuliert.

function downloadWithName(uri, name) {
  var link = document.createElement("a");
  link.download = name;
  link.href = uri;
  link.click();
}

Und das folgende Beispiel zeigt die Verwendung:

downloadWithName("data:,Hello%2C%20World!", "helloWorld.txt")

12voto

Nein.

Der gesamte Zweck besteht darin, dass es sich um einen Datenstrom handelt, nicht um eine Datei. Die Datenquelle sollte keine Kenntnis davon haben, dass der Benutzeragent sie als Datei behandelt ... und das tut sie nicht.

11voto

cuixiping Punkte 21110

Sie können dem Anker-Element das Download-Attribut hinzufügen.

Beispiel:

herunterladen

9voto

Adria Punkte 8078

Mit Service-Workern ist dies nun im wahrsten Sinne des Wortes möglich.

  1. Erstellen Sie eine gefälschte URL. Zum Beispiel /saveAs/myPrettyName.jpg
  2. Verwenden Sie die URL in , window.open( url ), absolut alles, was mit einer "echten" URL gemacht werden kann. * Fangen Sie im Worker das Fetch-Ereignis ab und antworten Sie mit den korrekten Daten.

`Der Browser wird nun myPrettyName.jpg vorschlagen, selbst wenn der Benutzer die Datei in einem neuen Tab öffnet und versucht, sie dort zu speichern. Es wird genauso sein, als ob die Datei vom Server stammen würde.

// Im Service Worker
self.addEventListener( 'fetch', function(e)
{
    if( e.request.url.startsWith( '/blobUri/' ) )
    {
        // Logik zur Auswahl des korrekten dataUri und Rückgabe als Response
        e.respondWith( dataURLAsRequest );
    }
});`

5voto

silex Punkte 4215

Schauen Sie sich diesen Link an: http://lists.w3.org/Archives/Public/uri/2010Feb/0069.html

Zitat:

Es funktioniert sogar (wie in, verursacht kein Problem) mit ; base64 am Ende
wie folgt (zumindest in Opera):

data:text/plain;charset=utf-8;headers=Content-Disposition%3A%20attachment%3B%20filename%3D%22with%20spaces.txt%22%0D%0AContent-Language%3A%20en;base64,4oiaDQo%3D

Auch in den restlichen Nachrichten der Diskussion gibt es einige Informationen.

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