2014-11-12 2 views
2

asp.net 4.5 및 MVC 5를 사용하여 웹 사이트를 만들었습니다. 내보기 중 하나에서 여러 파일을 업로드하고 싶습니다. 아래 코드를 사용하면 첫 번째 파일을 수집하고 저장하지만 업로드하려고 시도하는 파일의 수만큼 저장됩니다. 예를 들어MVC 5 여러 파일 업로드 동일한 파일을 여러 번 업로드

: 나는 파일을 선택 pic1.jpg와 파일 업 로더와 pic2.jpg. 결과적으로 파일 pic1.jpg이 두 번 저장됩니다.

디버깅하는 동안 나는 Request.Files[file]; 코드가 매번 동일한 파일을 반환한다는 것을 알았습니다. 그것은 동일한 파일 업 로더를 두 번 얻게되고 첫 번째 파일 만 선택됩니다.

업 로더를 통해 선택한 모든 파일을 가져 오도록 내 코드를 변경하려면 어떻게해야합니까?

컨트롤러

 [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Create(ProductViewModel product) 
     { 
      ... 

      foreach (string file in Request.Files) 
      { 
       var hpf = Request.Files[file]; 
       if (hpf != null && hpf.ContentLength > 0) 
       { 
        var savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.GetFileName(hpf.FileName)); 
        hpf.SaveAs(savedFileName); 
       } 
      } 

      ... 

      return RedirectToAction<ProductController>(x => x.Index()); 
     } 

보기

@model EVRY.OrderCapture.Administration.ViewModels.ProductViewModel 
<h2>@Resources.Resources.Create</h2> 

@using (Html.BeginForm("Create", "Product", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 

     ... 

     <div class="form-group"> 
      <label for="fileUpload" class="control-label col-md-2">Filename:</label> 
      <div class="col-md-10"> 
       <input type="file" name="files" id="fileUpload" multiple /> 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="@Resources.Resources.Create" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

답변

3

나 자신이 답을 발견했다. 이름 대신 색인을 선택해야했습니다.

for (var i = 0; i < Request.Files.Count; i++) 
     { 
      var hpf = Request.Files[i]; 
      if (hpf != null && hpf.ContentLength > 0) 
      { 
       var savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.GetFileName(hpf.FileName)); 
       hpf.SaveAs(savedFileName); 
      } 
     }