, поэтому я пытался загрузить несколько файлов на 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);
}
на стороне клиента я хотел, чтобы пользователь загружал несколько файлов, выбирая по одному
каждые файл, который пользователь выбирает, сохраненный в объекте 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, не полагаясь на плагин.