如何将多个文件上传到C#并在MVC中循环它们

时间:2016-08-05 11:45:03

标签: c# asp.net-mvc file-upload

我遇到了将多个文件上传到C#并循环遍历的问题。我发现了一个类似问题但没有人回答的问题。

我通过html输入上传多个文件。文件计数以相对于我选择的文件数量的正确数量传递到我的控制器。但是,当我尝试遍历每个文件时,它会循环访问相对于文件计数的第一个文件。例如,如果我上传3个文件,它将循环通过第一个文件3次,或者如果我上传5个文件,它将循环通过第一个文件5次。它不应该这样做。我希望它单独循环遍历每个文件。请帮忙!!!这是我的代码:

Razor View(我正在使用一个名为bootstrap-filestyle的fileinputs的bootstrap库):

@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>
}

控制器:

[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
}

我在handleFile(Request.Files, c.ClaimID);foreach (string fileName in Files){...}内设置了分数点。正如我所说,如果我上传3,4,5或任何数量的文件,它正确地传递了文件计数,但是它只循环遍历第一个文件的次数和return多次第一个文件。我需要它循环并单独返回每个文件。我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

使用来自服务器的请求,这是一个例子:

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

答案 1 :(得分:0)

或者您可以尝试这样的事情:

HttpPostedFileBase hpf = null;

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