1139 Stimmen

Wie kann man eine Datei im Speicher erstellen, die der Benutzer herunterladen kann, aber nicht über den Server?

Gibt es eine Möglichkeit, eine Textdatei auf der Client-Seite zu erstellen und den Benutzer aufzufordern, sie herunterzuladen, ohne dass eine Interaktion mit dem Server erforderlich ist? Ich weiß, dass ich nicht direkt auf den Rechner des Nutzers schreiben kann (Sicherheit und so), aber kann ich eine Datei erstellen und ihn auffordern, sie zu speichern?

15voto

pixparker Punkte 2485
function download(filename, text) {
  var element = document.createElement('a');
  element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
  element.setAttribute('download', filename);

  element.style.display = 'none';
  document.body.appendChild(element);

  element.click();

  document.body.removeChild(element);
}

// Start file download.
download("hello.txt","This is the content of my file :)");

Ursprünglicher Artikel : https://ourcodeworld.com/articles/read/189/how-to-create-a-file-and-generate-a-download-with-javascript-in-the-browser-without-a-server

11voto

Rick Punkte 11342

Wenn Sie nur eine Zeichenkette konvertieren möchten, um sie zum Download bereitzustellen, können Sie dies mit jQuery versuchen.

$('a.download').attr('href', 'data:application/csv;charset=utf-8,' + encodeURI(data));

11voto

Dzarek Punkte 529

Lösung, die im IE10 funktioniert: (Ich brauchte eine csv-Datei, aber es ist genug, um den Typ und den Dateinamen in txt zu ändern)

var csvContent=data; //here we load our csv data 
var blob = new Blob([csvContent],{
    type: "text/csv;charset=utf-8;"
});

navigator.msSaveBlob(blob, "filename.csv")

9voto

Mostafa Punkte 1559

Wie bereits erwähnt, Dateisparer ist ein hervorragendes Paket für die Arbeit mit Dateien auf der Client-Seite. Aber, es ist nicht gut mit großen Dateien zu tun. StreamSaver.js ist eine alternative Lösung (auf die in FileServer.js hingewiesen wird), die große Dateien verarbeiten kann:

const fileStream = streamSaver.createWriteStream('filename.txt', size);
const writer = fileStream.getWriter();
for(var i = 0; i < 100; i++){
    var uint8array = new TextEncoder("utf-8").encode("Plain Text");
    writer.write(uint8array);
}
writer.close()

8voto

MANVENDRA LODHI Punkte 89
var element = document.createElement('a');
element.setAttribute('href', 'data:text/text;charset=utf-8,' +      encodeURI(data));
element.setAttribute('download', "fileName.txt");
element.click();

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