Ich habe in der Lage JavaScript zu schreiben, um den Browser zu veranlassen, eine Datei von einem Remote-Server wie folgt unter Verwendung von Code zum Download:Wie bekomme ich einen Webbrowser, um eine Datei herunterzuladen, die in einer JavaScript-Zeichenfolge gespeichert ist?
var iframe = document.createElement("iframe");
iframe.style.display = "none";
iframe.src = "filename.zip"
document.body.appendChild(iframe);
der großen Werke. Allerdings habe ich jetzt eine andere Situation, wo der Inhalt der Datei in einer Zeichenfolge in meinem JavaScript auf der Browserseite gespeichert wird und ich einen Download dieser Datei auslösen muss. Ich habe versucht, oben mit dieser die dritte Zeile zu ersetzen, wobei ‚myFileContents‘ ist die Zeichenfolge, die tatsächlichen Bytes der Datei enthalten:
iframe.src = "data:application/octet-stream;base64," + Base64.encode(myFileContents);
Dies wird die Datei heruntergeladen, aber der Dateiname verloren. In Chrome ist der Dateiname nur 'Download'. Ich habe auch gelesen, dass die Dateigröße in einigen Browserversionen eingeschränkt ist.
Gibt es einen Weg, dies zu erreichen? Mit JQuery wäre OK. Die Lösung muss alle Dateitypen unterstützen - zip, pdf, csv, png, jpg, xls, etc ...
Danke. Ich habe einen anderen Beitrag gefunden, in dem jemand den Trick erwähnt hat, den Dateiinhalt und den Dateinamen auf dem Webserver zu veröffentlichen und dann die vollständige Antwort mit dem Inhalt-Dispositionskopf zurückgeben zu lassen. Eine Beispielimplementierung finden Sie hier: https://code.google.com/p/download-data-uri/. Ich habe versucht, diese Methode aufgrund von Leistungsproblemen durch die redundante Übertragung zu vermeiden. Ich werde den Trick 'a.download' ausprobieren und schauen, welche Browser es unterstützen. Vielen Dank. –
Ihre Lösung funktioniert in Chrome sehr gut, funktioniert jedoch derzeit nicht in anderen Browsern. Ich akzeptiere diese Antwort, bis ein besserer Vorschlag gemacht wird. Ich dachte, dass es immer noch einen Weg geben könnte, den Iframe-Trick mit einer Art gefälschtem Ajax-Post und einer falschen Antwort zu benutzen, aber ich würde nicht wissen, wie ich das machen soll. –
Anstelle von 'a.click()' können Sie 'var clickEvent = document.createEvent (" MouseEvent "); clickEvent.initEvent ("klick", true, true); a.dispatchEvent (clickEvent); ', damit es in Firefox und Chrome funktioniert –