Как загрузить несколько файлов с помощью одного элемента управления загрузкой в ​​приложении MVC - PullRequest
0 голосов
/ 13 мая 2019

У меня есть приложение MVC, в котором пользователь использует элемент управления загрузкой файлов и загружает файл, имеющий 30 МБ или более, в базу данных sql.

Я новичок в MVC arch. Извините, я могу задавать глупые вопросы!

Теперь клиент говорит, что конечные пользователи сталкиваются с трудностями при загрузке большого количества больших файлов, поэтомуон хотел оптимизировать, выбрав папку и загрузив все эти огромные файлы и вставив их в базу данных sql.

multi-file-upload-not-userfriendly

Конечные пользователи говорят, что они не хотят нажимать на кнопку загрузки и просматривать несколько раз.вместо этого они выберут папку, в которой будут все нужные файлы, и нажмут одну кнопку загрузки, она будет загружена / вставлена ​​в базу данных.На приведенном выше рисунке требуется 4 загрузки файла.но могут быть случаи, когда вам может понадобиться 10 загрузок файлов.в этом случае конечный пользователь не будет заинтересован в выполнении этой многофайловой загрузки, одна за другой.Эти файлы могут иметь размер от 10 КБ до 100 МБ!

Каков альтернативный подход для загрузки нескольких файлов, которые также имеют файлы большого размера, в БД?после нескольких раздумий я планирую:

1) Zip-файл и загрузить файлы в общую папку сервера, и оттуда мой код будет читать файлы один за другим и вставлять в db
, но кто-нибудь может подтвердитьправильный ли это подход?Мне нужно создать общий диск на сервере - скажем C:\sharedFolder, а затем я предложу пользователю просмотреть несколько файлов (скажем, file1.txt, file2.xlsx и т. Д., Которые имеют около 40 МБ, 50 МБ соответственно)..) и когда я нажму на кнопку «загрузить», я скопирую файлы и отправлю их в папку общей папки сервера.

что я пробовал: Я использовал контроль загрузки файла.

текущий код в моем файле 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 Ответ

2 голосов
/ 13 мая 2019

Вы можете получить несколько файлов, используя 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();
        }
...