从一个视图MVC中的两个上传控件发布图像

时间:2017-03-07 16:16:43

标签: c# html asp.net-mvc

我有两个文件上传控件。第一个控件接受图像类型的单个文件,它基本上是产品图标。第二个上传控件允许多个图像上传,它包含产品的几个图像。

现在我可以使用以下代码

成功上传文件
for (int i = 0; i < Request.Files.Count; i++)
        {
            var file = Request.Files[i];

            if (file != null && file.ContentLength > 0)
            {
                if (validImageTypes.Contains(file.ContentType))
                {
                    var fileName = Path.GetFileName(file.FileName);
                    LocationImage fileDetail = new LocationImage()
                    {
                        FileName = fileName,
                        Extension = Path.GetExtension(fileName),
                        ID = Guid.NewGuid()
                    };
                    fileDetails.Add(fileDetail);
                    var path = Path.Combine(Server.MapPath("~/Upload/Images"), fileDetail.ID + fileDetail.Extension);
                    file.SaveAs(path);
                }

这段代码完全保存文件,但我想将图标文件保存在一个单独的目录中我想知道该文件来自单个上传控件,以便我可以将其保存在Icon文件夹中。

1 个答案:

答案 0 :(得分:3)

您可以为操作方法使用命名参数,而不是从Request.Files

中读取文件

因此,在form(在您的视图中)中,为文件输入控件指定2个不同的名称

<input type="file" name="productIcon" />
<input type="file" name="productImages" multiple />

现在,在您的操作方法中,有2个参数与输入文件元素的名称相同。

[HttpPost]
public ActionResult Save(HttpPostedFileBase productIcon,
                                            IEnumerable<HttpPostedFileBase> productImages)
{
  // to do : Save these
  if(productIcon!=null)
  {
    // to do : Save icon image 
  }
  if(productImages!=null)
  {
     foreach(var img in productImages)
     {
       // to do : Save img
     } 
  }
  // to do : Return something
}