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

C# 如何在MVC应用程序中使用单个上载控件上载多个文件,c#,asp.net-mvc,httppostedfilebase,C#,Asp.net Mvc,Httppostedfilebase,我有一个MVC应用程序,其中用户使用fileupload控件并将30 MB或更多的文件上载到sql db中 我是MVC arch的新手,所以,对不起,我可能会问一些愚蠢的问题 现在,客户表示,最终用户在上传许多大文件时面临困难,因此,他希望通过选择一个文件夹并获取所有这些大文件并插入sql db来进行优化。 最终用户说,他们不想点击upload browse&而是多次点击。相反,他们会选择一个文件夹-其中包含他们想要的所有文件-他们会点击一个上传按钮,它将被上传/插入数据库。 在上图中,

我有一个
MVC
应用程序,其中用户使用fileupload控件并将30 MB或更多的文件上载到sql db中 我是MVC arch的新手,所以,对不起,我可能会问一些愚蠢的问题
现在,客户表示,最终用户在上传许多大文件时面临困难,因此,他希望通过选择一个文件夹并获取所有这些大文件并插入sql db来进行优化。

最终用户说,他们不想点击upload browse&而是多次点击。相反,他们会选择一个文件夹-其中包含他们想要的所有文件-他们会点击一个上传按钮,它将被上传/插入数据库。 在上图中,需要上传4个文件。但在某些情况下,可能需要上传10个文件。在这种情况下,最终用户将不会对逐个进行多文件上传感兴趣。这些文件的大小可能在10 kb到100 MB之间

有什么替代方法可以将多个文件上载到数据库中,这些文件也有很大的文件大小? 经过几番思考,我计划: 1) 压缩文件并将文件加载到服务器的共享位置,从那里,我的代码将逐个读取文件并插入数据库
但是,谁能确认这是否是正确的方法?我需要在服务器中创建一个共享驱动器,比如说
C:\sharedFolder
,然后我会提示用户浏览多个文件(比如file1.txt、file2.xlsx等,它们分别有大约40 mb和50 mb…),当点击上传时,我会复制文件并将其转储到服务器的sharedFolder位置

我尝试过的: 我使用了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 
                 }

您可以使用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();
        }
[HttpPost]
公共操作结果索引(HttpPostedFileBase文件上载1)
{
如果(FileUpload1.ContentLength>0)
{
HttpFileCollectionBase files=Request.files;
DataTable dt=newdatatable{Columns={newdatacolumn(“Path”)};
对于(int i=0;i
“最终用户面临困难”-什么困难?什么不起作用?您提出了可能的解决方案,并询问了对这些解决方案的想法,但从未真正描述过要解决的问题。上载大型文件时,您面临的确切困难是什么?出什么事了?我们说的有多大?顺便说一句,将文件本身存储在SQL Server中不是一个好主意,最好将它们放入一些文件存储中,并在SQL Server中以字符串形式保留文件路径…这样会更有效。顺便说一句,您似乎只是建议将一个上载过程替换为另一个上载过程…将上载多个大文件替换为上载一个更大的ZIP文件。如果上传大型项目是一个问题,那么这将如何解决问题?如果服务器与这些用户在同一网络上,最好让用户直接(通过Windows资源管理器)将文件复制到用户和服务器代码都可以访问的文件共享位置,并让.NET代码从那里收集文件。@ADyson最终用户说,他们不想点击上传浏览&而是多次点击。相反,他们会选择一个文件夹,其中包含他们想要的所有文件,他们会点击一个上传按钮,它将被上传/插入数据库。大文件大小与此有什么关系……如果有20个1kb的小文件,那么继续点击和选择也会很不方便,当然?考虑添加一些代码如何工作的细节。