2016-08-05 6 views
0

Ich habe ein Problem beim Hochladen mehrerer Dateien in C# und durchlaufe sie. Ich habe eine Frage mit einem ähnlichen Problem gefunden, aber niemand hat darauf geantwortet.So laden Sie mehrere Dateien in C# hoch und durchlaufen diese in MVC

Ich lade mehrere Dateien über eine HTML-Eingabe. Die Anzahl der Dateien wird mit der richtigen Menge relativ zu der Menge der ausgewählten Dateien an meinen Controller weitergeleitet. Wenn ich jedoch versuche, jede meiner Dateien zu durchlaufen, durchläuft sie die erste Datei relativ zur Anzahl der Dateien. Wenn ich zum Beispiel 3 Dateien hochlade, durchläuft es die erste Datei 3 Mal oder wenn ich 5 Dateien hochlade, durchläuft es die erste Datei 5 Mal. Es sollte das nicht tun. Ich möchte, dass jede Datei einzeln durchlaufen wird. Bitte helfen !!! hier ist mein Code:

Razor anzeigen (Ich bin eine Bootstrap-Bibliothek für fileinputs genannt Bootstrap-filestyle verwenden):

@using (Html.BeginForm("Initial", "DataCapture", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
<div class="form-group"> 

    <h4>Select files</h4> 
    <input type="file" multiple="multiple" id="fileToUpload" name="file"> 

</div> 

<div> 
    <input type="submit" value="Capture" class="btn btn-default" /> 
</div> 
} 

Controller:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Initial(ClaimModel claimModel) 
{ 
    if (ModelState.IsValid) 
    { 

     //OtherCode 
     handleFile(Request.Files, c.ClaimID); 

     return RedirectToAction("Index", "ClaimFiles", new { id = c.ClaimID }); 
    } 

//OtherCode 
} 


private void handleFile(HttpFileCollectionBase Files, int ClaimID) 
{ 

    foreach (string fileName in Files) 
    { 
     HttpPostedFileBase file = Request.Files[fileName]; 
     //OtherCode 
    } 
//OtherCode 
} 

Ich habe brechen Punkte auf handleFile(Request.Files, c.ClaimID); und innerhalb foreach (string fileName in Files){...}. Wie ich schon sagte, es passiert die Anzahl der Dateien korrekt, wenn ich 3, 4, 5 oder eine beliebige Anzahl von Dateien hochlade, aber es wiederholt nur die erste Datei in dieser Anzahl von Malen und return s die erste Datei mehrmals. Ich muss es durchlaufen und jede Datei einzeln zurückgeben. Wie mache ich das richtig?

+1

Weil Sie eine Datei-Eingabe mit 'name = "file" 'Wenn Sie also mehrere Dateien auswählen, haben sie alle' name = "file" 'und' HttpPostedFileBase file = Request.Files ["file"]; 'gibt nur den ersten mit diesem Namen zurück. Verwenden Sie eine 'for'-Schleife –

Antwort

2

Verwenden Anforderung von Server, hier ist ein Beispiel:

for (int i = 0; i < Request.Files.Count; i++) 
{ 
    var fileDoc = Request.Files[i]; 
} 
0

Oder Sie können so etwas wie dies versuchen:

HttpPostedFileBase hpf = null; 

foreach (string file in Request.Files) 
{ 
    hpf = Request.Files[file] as HttpPostedFileBase; 
} 
Verwandte Themen