Zum Schluss für zukünftige Leser.
Asynchrones Datei-Upload
Mit HTML5
Sie können Dateien mit jQuery verwenden, indem Sie die $.ajax()
-Methode verwenden, wenn FormData und das File API unterstützt werden (beides HTML5-Funktionen).
Sie können Dateien auch ohne FormData senden, aber in jedem Fall muss das File API vorhanden sein, um Dateien so zu verarbeiten, dass sie mit XMLHttpRequest (Ajax) gesendet werden können.
$.ajax({
url: 'file/destination.html',
type: 'POST',
data: new FormData($('#formWithFiles')[0]), // Das Formular mit den Dateieingaben.
processData: false,
contentType: false // Bei Verwendung von FormData müssen Daten nicht verarbeitet werden.
}).done(function(){
console.log("Erfolg: Dateien gesendet!");
}).fail(function(){
console.log("Ein Fehler ist aufgetreten, die Dateien konnten nicht gesendet werden!");
});
Für ein schnelles, reines JavaScript (kein jQuery) Beispiel siehe "Senden von Dateien mithilfe eines FormData-Objekts".
Ausweichlösung
Wenn HTML5 nicht unterstützt wird (kein File API), ist die einzige andere reine JavaScript-Lösung (kein Flash oder kein anderes Browser-Plugin) die versteckte iframe-Technik, die es ermöglicht, eine asynchrone Anfrage zu emulieren, ohne das XMLHttpRequest-Objekt zu verwenden.
Sie besteht darin, einen iframe als Ziel des Formulars mit den Dateieingaben festzulegen. Wenn der Benutzer eine Anfrage sendet, werden die Dateien hochgeladen, aber die Antwort wird im iframe angezeigt, anstatt die Hauptseite neu zu rendern. Durch Ausblenden des iframes wird der gesamte Prozess für den Benutzer transparent gemacht und eine asynchrone Anfrage wird emuliert.
Wenn es ordnungsgemäß durchgeführt wird, sollte es praktisch auf jedem Browser funktionieren, hat aber einige Einschränkungen, wie das Abrufen der Antwort aus dem iframe.
In diesem Fall können Sie bevorzugen, einen Wrapper-Plugin wie Bifröst zu verwenden, der die iframe-Technik verwendet, aber auch einen jQuery Ajax-Transport bereitstellt, der es ermöglicht, Dateien nur mit der $.ajax()
-Methode wie folgt zu senden:
$.ajax({
url: 'file/destination.html',
type: 'POST',
// Setzen Sie den Transport zum Verwenden (iframe bedeutet, Bifröst zu verwenden)
// und den erwarteten Datentyp (hier json).
dataType: 'iframe json',
fileInputs: $('input[type="file"]'), // Die Dateieingaben, die die zu sendenden Dateien enthalten.
data: { msg: 'Einige zusätzliche Daten, die Sie vielleicht benötigen.'}
}).done(function(){
console.log("Erfolg: Dateien gesendet!");
}).fail(function(){
console.log("Ein Fehler ist aufgetreten, die Dateien konnten nicht gesendet werden!");
});
Plugins
Bifröst ist nur ein kleiner Wrapper, der die Ausweichunterstützung für die jQuery-Ajax-Methode hinzufügt, aber viele der bereits erwähnten Plugins wie jQuery Form Plugin oder jQuery File Upload enthalten den gesamten Stapel von HTML5 bis hin zu verschiedenen Ausweichlösungen und einige nützliche Funktionen, um den Prozess zu erleichtern. Je nach Bedarf und Anforderungen möchten Sie möglicherweise eine reine Implementierung oder eines dieser Plugins in Betracht ziehen.
0 Stimmen
Es gibt verschiedene fertige Plugins zum Hochladen von Dateien für jQuery. Das Durchführen solcher Upload-Hacks ist keine angenehme Erfahrung, daher verwenden die Leute lieber fertige Lösungen. Hier sind einige: - JQuery File Uploader - Mehrere Datei-Upload-Plugin - Mini Mehrfachdatei-Upload - jQuery-Datei-Upload Sie können nach weiteren Projekten auf NPM (unter Verwendung des Schlüsselworts "jquery-plugin") oder auf Github suchen.
78 Stimmen
Du erhältst nur den Dateinamen, weil deine Variable Dateiname den Wert von $('#file') erhält, nicht die Datei, die im Eingabefeld liegt
0 Stimmen
Ich bin auf einige wirklich leistungsstarke jQuery-basierte Datei-Upload-Bibliotheken gestoßen. Schau sie dir an: 1. Plupload - Dokumentation: plupload.com/docs 2. jQuery File Upload - Dokumentation: github.com/blueimp/jQuery-File-Upload 3. FineUploader - Dokumentation: docs.fineuploader.com
22 Stimmen
Hier ist einer: http://blueimp.github.io/jQuery-File-Upload/ - HTML5 Ajax-Upload - Eleganter Ausweichmodus auf iFrames für nicht unterstützte Browser - Mehrfachdatei-Async-Upload Wir haben es verwendet und es funktioniert großartig. (Hier finden Sie die Dokumentation)
3 Stimmen
Überprüfen Sie auch dies: stackoverflow.com/questions/6974684/…, hier wird erklärt, wie man es über jQuery erreichen kann.
2 Stimmen
@Jimmy Wie würde er die Datei erhalten, die im Eingabefeld liegt?
0 Stimmen
@Sergio haben dir keine der 34 Antworten geholfen? Wenn ja, dann schätze es bitte und markiere es als akzeptiert.