如何在MVC应用程序中使用单个上传控件上传多个文件

时间:2019-05-13 13:01:19

标签: c# asp.net-mvc httppostedfilebase

具有MVC应用程序的Am,其中用户使用fileupload控件并将具有30 MB或更大大小的文件上载到sql db。

 对MVC arch来说还很新。所以,很抱歉,我可能会问一些愚蠢的问题!

现在,客户说,最终用户在上传许多大文件时遇到了困难,因此,他想通过选择一个文件夹并提取所有这些大文件并将其插入sql db进行优化。

  multi-file-upload-not-userfriendly

最终用户说,他们不想单击“上载浏览”,而是多次单击。相反,他们将选择一个文件夹-包含他们想要的所有文件-并单击一个上载按钮,该文件夹将被上载/插入到db中。 在上图中,需要上传4个文件。但在某些情况下,可能需要上传10个文件。在这种情况下,最终用户将不会对一次多文件上传感兴趣。这些文件的大小可能在10 kb到100 MB之间!

将多个也有大文件的文件上传到db的替代方法是什么?  经过一番思考,我打算:  

  1)压缩文件文件并将文件加载到服务器的共享位置,然后从那里,我的代码将逐个读取文件并插入db
  但是,谁能确认这是正确的方法吗?我需要在服务器中创建一个共享驱动器-例如C:\sharedFolder,然后我将提示用户浏览多个文件(例如file1.txt,file2.xlsx等,分别具有大约40 mb,50 MB ...),然后单击“上传”,我将复制文件并将其转储到服务器的共享文件夹位置。

我尝试过的事情:        我使用了fileupload控件。  

   我的ABCcontroller.cs文件中的当前代码:

   [HttpPost]   
   public ActionResult UploadfilePost(HttpPostedFileBase file)
    {
        string _path;
        try
        {
            if (file.ContentLength > 0)
            {
       string _FileName = Path.GetFileName(file.FileName);
      _path = Path.Combine(Server.MapPath(@"~/App_Data"), _FileName);
          file.SaveAs(_path);
          var tempFileName = Path.GetTempFileName();
                try
                {
       using (var streamReader = new StreamReader(_path))
       using (var streamWriter = new StreamWriter(tempFileName))
                  {
              // code to further manipulate 
                 }

1 个答案:

答案 0 :(得分:2)

您可以使用Request.Files作为HttpFileCollectionBase获得多个文件,并且通过迭代可以上传多个文件。

[HttpPost]
        public ActionResult Index(HttpPostedFileBase FileUpload1)
        {
            if (FileUpload1.ContentLength > 0)
            {
                HttpFileCollectionBase files = Request.Files;
                DataTable dt = new DataTable { Columns = { new DataColumn("Path") } };
                for (int i = 0; i < files.Count; i++)
                {
                    HttpPostedFileBase file = files[i];
                    string path = Server.MapPath("~") + "\\Images\\" + file.FileName;
                    dt.Rows.Add(file.FileName);
                    file.SaveAs(path);
                }
                ViewData.Model = dt.AsEnumerable();
            }
            return View();
        }