0

Ich arbeite an MVC 5-Anwendung. Und ich muss mehrere Dateien hochladen.Asp.net MVC 5 Ajax Multi-Datei-Upload benötigen möglicherweise Wertanbieter, Vorschläge?

Was ich weiß, ist HttpPostedFile und HttpPostedFileBase Klassen können eine Datei erhalten. Aber meine Bedingung ist, dass ich mehrere Dateien gleichzeitig hochladen muss.

Meine Frage ist,

1) Da gibt es keine Unterstützung für mehrere Datei-Upload mit Ajax, muss ich Wertanbieter schreiben, dass meine Aktion machen, mehrere Dateien zu akzeptieren?

2) Wenn ich benutzerdefinierten Wertanbieter implementiere, was sollte ich für Parameter in Aktionsmethode verwenden (sollte es IEnumerable<HttpPostedFileBase> f sein)? Weil ich das tat und ich bekomme null.

aktualisieren

Hier ist meine Ajax-Aufruf von View

var files = e.target.files; 
     if (window.FormData !== undefined) { 
      var fd = new FormData(); 
      for (x = 0; x < files.length; x++) { 
       fd.append("file" + x, files[x]); 
      } 
      // fd.append("fawad", "ali"); 
      $.ajax({ 
       type: "POST", 
       url: "/FileOp/FileUpload", 
       contentType: false, 
       processData: false, 
       data: fd, 
       sucess: function (result) { 
        // alert(); 
       }, 
       error: function (xhr, status, p3, p4) { 
        alert(xhr.responseText); 
       } 
      }); 

Und hier meine Aktionsmethode ist (Httppost)

[HttpPost] 

    public object FileUpload(IEnumerable<HttpPostedFileBase> file) 

Dank

+1

nutzen könnten Sie brauchen keinen eigenen Wert-Anbieter. Sie brauchen nur eine Eigenschaft in Ihrem View-Modell (oder einen Parameter in Ihrer POST-Methode, IEnumerable XXX), wobei 'XXX' der Name Ihrer Dateieingabe ist (und ich nehme an, dass Sie' FormData' verwenden, wie in [diese Antwort] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc/29293681#29293681) zu upload die Dateien mit Ajax –

+0

@StephenMuecke "Name Ihrer Dateieingabe". nicht möglich, es kann x Anzahl der Dateien sein. so erste Datei ist 'file1', zweite ist' file2' und so weiter – Alex

+0

@StephenMuecke hier mein Controller aufrufen ajax $ Schnipsel ({ Typ: "POST", url: "/ FileOp/Fileupload", content: false, verarbeite: false, Daten: fd, sucess: function (result) { // Alarm(); }, Fehler: Funktion (xhr, Status, p3, p4) { Warnung (xhr.responseText); } }); – Alex

Antwort

1

Ihre hinzufügen Dateien mit dem Namen file0, file1, file2 etc, die nicht an einen Parameter mit dem Namen file binden.

Ändern Sie den Code in das Skript

for (x = 0; x < files.length; x++) { 
    fd.append("file", files[x]); // modify 
} 

Alternativ Sie

fd.append("[" + x + "].file", files[x]); 
+0

danke, es funktioniert gut – Alex