У меня есть эта декларация Dropzone ниже.Проблема, с которой я столкнулся сейчас, заключается в том, что когда я отправляю форму с несколькими файлами на сервер, она будет восприниматься не как один запрос, а как несколько запросов. Вот почему, когда сервер возвращает ответ, я получаю дублированные результаты.Могу ли я что-либо изменить в коде JavaScript или на стороне сервера, чтобы этого не произошло?Что-то не так с Dropzone вместо этого?
Чтобы было понятно: при загрузке 1 файла я получаю 1 ответ от сервера.Это правильно.Когда я загружаю 3 файла, я получаю 9 ответов от сервера, потому что сервер принимает его как каждый запрос, передающий 3 файла 3 раза.Это неправильно
Прилагается пример
<script>
Dropzone.options.dropzone = {
url:"@Url.Action("Save", @ViewContext.RouteData.Values["controller"].ToString())",
autoProcessQueue: false,
addRemoveLinks: true,
uploadMultiple: true,
parallelUploads: 100,
init: function (e) {
var results = Array();
var submitButton = document.querySelector("#submit");
var token = $('input[name="__RequestVerificationToken"]').val();
var wrapperThis = this;
submitButton.addEventListener("click", function (e) {
console.log("submitted");
wrapperThis.processQueue();
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
return false;
});
this.on("addedfile", function (file) {
console.log("Added file");
}),
this.on('sendingmultiple', function (data, xhr, formData) {
formData.append("__RequestVerificationToken",token);
formData.append("CategoryId", $("#CategoryId").val());
formData.append("RepositoryId", $("#RepositoryId").val());
});;
this.on('error', function (file, message) {
toastr.error(message);
console.log(message);
});
this.on('success', function (file, message) {
//toastr.success(message);
console.log(message);
});
}
};
</script>
Вот мой код сервера:
[ValidateAntiForgeryToken]
[HttpPost]
public async Task<ActionResult> Save(UploadDocumentViewModel Input)
{
JsonResult result = new JsonResult(null);
List<string> uploadResults = new List<string>();
var repo = repositoriesData.Get(Input.RepositoryId);
if (repo != null)
{
foreach (var item in Request.Form.Files)
{
var file = ContentDispositionHeaderValue.Parse(item.ContentDisposition);
var fileName = file.FileName.Trim('"');
var fullFilePath = Path.Combine(repo.Path, fileName);
SaveDocumentViewModel sdvm = new SaveDocumentViewModel
{
ApplicationName = configuration["ApplicationConfiguration:Name"],
ApplicationSecretKey = configuration["ApplicationConfiguration:SecretKey"],
DocumentCategoriesId = Input.CategoryId,
Name = fileName,
Filetype = item.ContentType,
Link = Url.Content("~" + RepositoryManager.GetRequestPath() + "/" + repo.Name + "/" + fileName),
Location = fullFilePath,
};
var documentId = documentsData.Save(sdvm);
if (documentId != null)
{
documentCategoriesData.ProcessFile(Input.CategoryId, documentId, fileName);
using (var fileStream = new FileStream(fullFilePath, FileMode.Create))
{
await item.CopyToAsync(fileStream);
}
uploadResults.Add(fileName + " " + LoggingGlobals.Upload);
}
else
{
return BadRequest(LoggingGlobals.UploadFailed);
}
}
}
else
{
return BadRequest(LoggingGlobals.UploadFailed);
}
return Ok(uploadResults);
}