Загрузка нескольких файлов с ajax на asp. net mvc 5 - PullRequest
0 голосов
/ 18 июня 2020

, поэтому я пытался загрузить несколько файлов на asp. net mvc веб-сайт, используя AJAX, и я обнаружил проблему при тестировании своего кода.

У меня есть два действия:

[HttpGet]
public ActionResult Create()
{
    Session["Attachement"] = new List<Attachement>();
}

[HttpPost]
public ActionResult Create(InformationViewModel model)
{
     Information info = new Information
     {
            Message = model.Message,
            Object = "",
            Publish_Date = DateTime.Now,
            Attachements = (Session["Attachement"] as List<Attachement>)
    };
    _db.Informations.Add(info);
    _db.SaveChanges();

    return RedirectToAction("Index");
}

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

 public ActionResult SaveFiles()
    {
        List<string> filesNames = new List<string>();
        foreach (string FileName in Request.Files)
        {
            HttpPostedFileBase file = Request.Files[FileName];
            filesNames.Add(file.FileName);
            String pathOnServer = Path.Combine(Path.Combine(HostingEnvironment.MapPath("~/Upload/")));

            if (!Directory.Exists(pathOnServer))
            {
                Directory.CreateDirectory(pathOnServer);
            }

            var fullPath = Path.Combine(pathOnServer, Path.GetFileNameWithoutExtension(file.FileName) + DateTime.Now.ToString("yyyyMMddHHmmss") + Path.GetExtension(file.FileName) );

            Attachement a = new Attachement
            {
                Path = fullPath,
                FileName = Path.GetFileName(file.FileName),
                Type = file.ContentType,
                url = "",
            };

            (Session["Attachement"] as List<Attachement>).Add(a);

            file.SaveAs(fullPath);
        }

        return Json(new { response = filesNames }, JsonRequestBehavior.AllowGet);
    }

на стороне клиента я хотел, чтобы пользователь загружал несколько файлов, выбирая по одному

enter image description here

каждые файл, который пользователь выбирает, сохраненный в объекте FormData в js

var formData = new FormData();
$(document).on('change', '.Attachement', function () {
    var fileName = this.files[0].name;
    formData.append(fileName, this.files[0]);
}

, и после того, как он выберет все файлы и нажмет «Сохранить», сообщение ajax будет отправлено в действие SaveFiles () через js

$("#saveFiless").click(function () {
            alert(i);
            $.ajax({
                url: '/Stream/SaveFiles',
                type: 'post',
                data: formData,
                contentType: false,
                processData: false,
                success: function (response) {
            });
        });

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...