Wie hier bereits jeder gesagt hat: Sie können nicht irgendeine Datei automatisch mit JavaScript hochladen.
ABER! Wenn Sie Zugriff auf die Informationen haben, die Sie in Ihrem Code senden möchten (d.h., nicht C:\passwörter.txt
), können Sie diese als blob-Typ hochladen und dann als Datei behandeln.
Was der Server schließlich sehen wird, wird nicht von jemandem zu unterscheiden sein, der den Wert von tatsächlich festlegt. Der Trick besteht letztendlich darin, eine neue XMLHttpRequest()
mit dem Server zu starten...
function uploadFile (data) {
// Daten und Verbindungen definieren
var blob = new Blob([JSON.stringify(data)]);
var url = URL.createObjectURL(blob);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'myForm.php', true);
// Neues Formular definieren
var formData = new FormData();
formData.append('someUploadIdentifier', blob, 'someFileName.json');
// Aktion nach dem Hochladen
xhr.onload = function(e) {
console.log("Datei hochladen abgeschlossen!");
};
// Hochladen durchführen
console.log("Datei hochladen gestartet!");
xhr.send(formData);
}
// Diese Daten/Text unten sind lokal für das JS-Skript, daher dürfen wir sie senden!
uploadFile({'hallo!':'wie geht es dir?'});
Also, wofür könnten Sie das möglicherweise verwenden? Ich benutze es, um HTML5 Canvas-Elemente als jpg's hochzuladen. Dies erspart dem Benutzer die Mühe, ein Datei
input
-Element öffnen zu müssen, nur um das lokale, zwischengespeicherte Bild auszuwählen, das sie gerade verkleinert, geändert usw. haben. Aber es sollte für alle Dateitypen funktionieren.
3 Stimmen
Ich habe hier eine vollständige, referenzierte und auf dem neuesten Stand (Dezember 2013) Antwort dazu verfasst: Remember and Repopulate File Input
1 Stimmen
1) Das Problem mit dem Standardwert bei einer Dateieingabe wird NICHT "aus Sicherheitsgründen" gemacht, sondern die Browser "scheiterten einfach daran, es auszuführen, ohne guten Grund": siehe diesen ausführlichen Bericht 2) Eine einfache Lösung kann sein, einen Texteingabe über die Dateieingabe zu platzieren, wie hier. Natürlich benötigen Sie etwas Code, um die Datei zu senden, wobei jetzt der Wert in der Texteingabe und nicht in der Dateieingabe verwendet wird. In meinem Fall, da ich eine HTA-Anwendung erstelle, ist das kein Problem, da ich überhaupt kein Formular verwende.