使用asp.net mvc上传多个文件/文件路径

时间:2016-01-26 15:37:40

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在为一家地产代理商创建一个网络应用程序,并在其中一个用于上传属性的表单上,我需要将多个图像或文件(如pdf格式的平面图)上传到文件夹并将其路径存储在数据库中(SQL SERVER) 。

我尝试使用在线资源的一些帮助,但我无法自行解决这个问题。

这是我浏览文件的部分内容。

<div class="file_inputs">

<input type="file" id="dev_brochure" name="dev_brochure" class="form-control adminarea_files">
<input type="file" id="devListingImg1" name="devListingImg1" class="form-control adminarea_files">
<input type="file" id="devListingImg2" name="devListingImg2" class="form-control adminarea_files">
<input type="file" id="devListingImg3" name="devListingImg3" class="form-control adminarea_files"> 

</div>

这是我的处理文件上传的控制器

[HttpPost]
public ActionResult InsertDevelopment(development dev, IEnumerable <HttpPostedFileBase> files) 
    {
        try 
        {
          var supportedFileTypes = new [] {"jpg", "jpeg", "png", "gif", "pdf"};
            foreach(var file in files)
            {
              if(file.ContentLength > 0)
              {
                var fileExt = Path.GetExtension(file.FileName).Substring(1);
       if(!supportedFileTypes.Contains(fileExt))
           {
       TempData["Msg"] = "You have tried to upload a file type that is not allowed";
 return RedirectToAction("Create");
                    }

                 }
                }

            var devBrochure = Path.GetFileName(Request.Files["dev_brochure"].FileName);
           var devListingPhoto1_LinkName = Path.GetFileName(Request.Files["devListingImg1"].FileName);
           var devListingPhoto2_LinkName = Path.GetFileName(Request.Files["devListingImg2"].FileName);
           var devListingPhoto3_LinkName = Path.GetFileName(Request.Files["devListingImg3"].FileName);

           return View("Create");
        }
        catch(Exception e)
        {
            TempData["Msg"] = "Development upload failed :" + e.Message;
            return View("Create");
        }


    }

我的主要问题是控制器操作IEnumerable <HttpPostedFileBase> files参数中未收到视图中的文件。

我会很感激任何形式的指南来解决这个问题。 感谢

2 个答案:

答案 0 :(得分:2)

如果您只是发布表单,请确保表单的内容类型设置为multipart / form-data。

<form action="yourAction" enctype="multipart/form-data" method="post">

如果您尝试使用jquery / ajax发帖,请查看有关该主题的this excellent post。您基本上需要使用jquery来模仿具有该内容类型的表单帖子。

使用HttpFileCollectionValueProvider

如果(根据您的评论/澄清),这不是您的问题,那么可能就是您尝试在控制器级别上传这些文件的方式。

上传多个文件时,我始终关注this advice。简而言之,尝试放弃HttpPostedFileBase参数或尝试将文件对象名称与参数名称匹配

如果你想坚持&#34;文件&#34;作为参数名称:

<input type="file" name="files[0]" id="files_0" class="form-control adminarea_files">
<input type="file" name="files[1]" id="files_1" class="form-control adminarea_files">
<input type="file" name="files[2]" id="files_2" class="form-control adminarea_files">
<input type="file" name="files[3]" id="files_3" class="form-control adminarea_files"> 

答案 1 :(得分:1)

确保您的表单标记指定了属性

enctype="multipart/form-data" method="post"

还要确保input-Elements的名称属性设置为

name="files[0]"
name="files[1]"

等等