3148 Stimmen

Wie kann ich Dateien mit jQuery asynchron hochladen?

Ich möchte eine Datei asynchron mit jQuery hochladen.

$(document).ready(function () {
    $("#uploadbutton").click(function () {
        var filename = $("#file").val();

        $.ajax({
            type: "POST",
            url: "addFile.do",
            enctype: 'multipart/form-data',
            data: {
                file: filename
            },
            success: function () {
                alert("Daten hochgeladen: ");
            }
        });
    });
});

Datei

Statt die Datei hochzuladen, erhalte ich nur den Dateinamen. Was kann ich tun, um dieses Problem zu beheben?

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

3voto

lat94 Punkte 491

Es ist eine alte Frage, aber hat noch keine korrekte Antwort, also:

Hast du jQuery-File-Upload versucht?

Hier ist ein Beispiel aus dem obigen Link, das Ihr Problem lösen könnte:

$('#fileupload').fileupload({
    add: function (e, data) {
        var that = this;
        $.getJSON('/example/url', function (result) {
            data.formData = result; // z.B. {id: 123}
            $.blueimp.fileupload.prototype
                .options.add.call(that, e, data);
        });
    } 
});

3voto

kvz Punkte 4837

Sie könnten auch in Betracht ziehen, etwas wie https://uppy.io zu verwenden.

Es ermöglicht das Hochladen von Dateien, ohne die Seite zu verlassen, und bietet einige Extras wie Drag & Drop, Fortsetzen von Uploads im Falle von Browserabstürzen/schwachen Netzwerken und Importieren z.B. von Instagram. Es ist Open Source und benötigt kein jQuery/React/Angular/Vue, kann aber damit verwendet werden. Haftungsausschluss: Als Schöpfer bin ich voreingenommen ;)

2voto

Diego Vinícius Punkte 1964

Was wäre, wenn man Versprechen benutzt, die Ajax aufrufen und überprüfen, ob die Datei gültig und gut in Ihrem Backend gespeichert ist, damit Sie Animationen verwenden können, während der Benutzer durch Ihre Seite navigiert.

Sie können es sogar als parallelen Upload machen oder stapeln mit einem rekursiven Ansatz

-5voto

Michael Wang Punkte 81

Sie können den folgenden Code verwenden.

async: false(true)

0 Stimmen

Können Sie Ihre Antwort näher erläutern? Es ist nicht klar, wo diese Änderung vorgenommen werden soll.

0 Stimmen

Sie können es der Ajax-Aufruffunktion hinzufügen

1 Stimmen

Das ist eine ungültige Syntax und beantwortet diese Frage nicht.

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