2017-07-08 68 views
0

我在MVC中創建一個包含多個文件上傳器的頁面。enumerable,在mvc中循環

我想達到的目標是,當我提交值上傳應該被命名爲​​圖像和遞增i超值,喜歡guid0guid1guid2。我嘗試了循環,但它只保存一個圖像,直到循環結束。 i++雖然不工作。

我的控制器看起來是這樣的:

public ActionResult Home(SomeClass someclass, IEnumerable<HttpPostedFileBase> files) 
    { 
     var guid = Guid.NewGuid().ToString(); 
     someclass.filename = guid; 
     int i = 0; 
     foreach (var file in files) 
     { 
      if (file.ContentLength > 0) 
      { 
       var fileName = guid + "" + i + ".jpg"; 
       var path = Path.Combine(Server.MapPath("~/Content/admin/Upload"), fileName); 
       file.SaveAs(path); 
       i++;       
      } 
     } 
     db.someclasses.Add(someclass); 
     db.SaveChanges();     
     return RedirectToAction("Preview"); 
     } 

而我的觀點是這樣的

<input type="file" name="files" id=1> 
<input type="file" name="files" id=2> 

更新:我收到11個文件的,如果循環,但一旦他們經過在名爲fdea36c3-545a-4e08-8af4-7fa6bd88bc6b0的圖像文件夾中只有單個圖像。我試圖實現的是所有11個圖像命名爲fdea36c3-545a-4e08-8af4-7fa6bd88bc6b0,fdea36c3-545a-4e08-8af4-7fa6bd88bc6b1,fdea36c3-545a-4e08-8af4-7fa6bd88bc6b2 .....等等。

回答

1

如果你在視圖上有多個文件控件,試試這種方法。 你甚至可以爲每個文件初始化Guid,並且可以忽略將其附加到名稱。

public class MultipleFilesForm 
{ 
    public HttpPostedFileBase file1 {get;set;} 

    public HttpPostedFileBase file2 {get;set;} 
} 

動作方法

public ActionResult Home(MultipleFilesForm form) 
{ 
     var guid = Guid.NewGuid().ToString(); 
     someclass.filename = guid; 
     int i = 0; 

    if(form.file1 != null) 
    { 
      var file = form.file1; 
      if (file.ContentLength > 0) 
      { 
       var fileName = guid + i.ToString() + Path.GetExtension(file.FileName)); 
       var path = Path.Combine(Server.MapPath("~/Content/admin/Upload"), fileName); 
       file.SaveAs(path); 
       i++;       
      } 
    } 
    if(form.file2 != null) 
    { 
     //handle file 
    } 

    ... 
} 

[UPDATE] 嘗試這樣

嘗試這一點。

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

      if (file != null && file.ContentLength > 0) 
      { 
    var fileName = guid + i.ToString() + Path.GetExtension(file.FileName)); 

var path = Path.Combine(Server.MapPath("~/Content/admin/Upload"), fileName); 

file.SaveAs(path); 

i++; 
      } 
     } 
+0

我不想爲每個文件這樣做,因爲它需要設置和從數據庫中檢索11個不同的圖像。感謝您的答案.... –

+0

您確定來自多個文件上傳控件的文件可用於IEnumerable 文件嗎? AFAIK,只有當文件控制設置爲多個屬性時,纔會獲得多個文件。 –

+0

我在file.contenLength> 0我收到11個文件我有什麼辦法可以實現fdea36c3-545a-4e08-8af4-7fa6bd88bc6b0,fdea36c3-545a-4e08-8af4-7fa6bd88bc6b1哪裏最後一個數字串在int值 –

2

那麼,我不是很熟悉HTML輸入,但我認爲你應該在你的SINGLE文件輸入標籤中使用「multiple」屬性。 或將「文件」重命名爲「文件[]」。 看看this

+0

以及我不想從同一個上傳器上傳多個文件。要求是將這些圖像保存爲guid,後跟「i」或我想要連接的任何字符串。 –

+0

@piyushsanadhya哦,好的。你確定你的動作正在接收你提交的所有圖像嗎?我認爲這可能只有一個通過。你可以在調試器中看到文件變量嗎? – bogdanbrizhaty

+0

所有我的文件正在接收我在 –