2017-07-08 64 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

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