Der einfachste und robusteste Weg, den ich in der Vergangenheit dafür verwendet habe, ist einfach ein verstecktes iFrame-Tag mit Ihrem Formular anzusprechen - dann wird es innerhalb des iFrames ohne Neuladen der Seite übermittelt.
Das gilt, wenn Sie kein Plugin, JavaScript oder andere Formen von "Magie" außer HTML verwenden möchten. Natürlich können Sie dies mit JavaScript oder etwas anderem kombinieren...
Sie können auch den Inhalt des iFrames onLoad
lesen, um Serverfehler oder Erfolgsantworten zu überprüfen und diese dann dem Benutzer auszugeben.
Chrome, iFrames und onLoad
-Anmerkung- Sie müssen nur weiterlesen, wenn Sie daran interessiert sind, wie man einen UI-Blocker einrichtet, wenn Uploads/Downloads durchgeführt werden
Aktuell löst Chrome das onLoad-Ereignis für das iFrame nicht aus, wenn es zum Dateitransfer verwendet wird. Firefox, IE und Edge lösen alle das onload-Ereignis für Dateiübertragungen aus.
Die einzige Lösung, die ich für Chrome gefunden habe, war die Verwendung eines Cookies.
Im Grunde genommen, wenn der Upload/Download gestartet wird:
- [Clientseite] Starten Sie ein Intervall, um nach dem Vorhandensein eines Cookies zu suchen
- [Serverseite] Führen Sie alle erforderlichen Aktionen mit den Dateidaten durch
- [Serverseite] Setzen Sie das Cookie für das Clientseiten-Intervall
- [Clientseite] Das Intervall sieht das Cookie und verwendet es wie das onLoad-Ereignis. Zum Beispiel können Sie einen UI-Blocker starten und dann onLoad (oder wenn das Cookie erstellt wird) entfernen Sie den UI-Blocker.
Die Verwendung eines Cookies dafür ist unschön, aber es funktioniert.
Ich habe ein jQuery-Plugin erstellt, um dieses Problem für Chrome beim Herunterladen zu lösen, das Sie hier finden können
https://github.com/ArtisticPhoenix/jQuery-Plugins/blob/master/iDownloader.js
Dasselbe Grundprinzip gilt auch für das Hochladen.
Um den Downloader zu verwenden (fügen Sie das JS ein, offensichtlich)
$('body').iDownloader({
"onComplete" : function(){
$('#uiBlocker').css('display', 'none'); //UI-Blocker bei Abschluss ausblenden
}
});
$('somebuttion').click( function(){
$('#uiBlocker').css('display', 'block'); //UI blockieren
$('body').iDownloader('download', 'htttp://example.com/location/of/download');
});
Und auf der Serverseite, kurz bevor die Dateidaten übertragen werden, erstellen Sie das Cookie
setcookie('iDownloader', true, time() + 30, "/");
Das Plugin erkennt das Cookie und löst dann das onComplete
Rückruf aus.
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.