Параллельная загрузка файла ASP.NET Core Ajax приводит к тому, что сервер дважды возвращает одни и те же результаты - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть эта декларация Dropzone ниже.Проблема, с которой я столкнулся сейчас, заключается в том, что когда я отправляю форму с несколькими файлами на сервер, она будет восприниматься не как один запрос, а как несколько запросов. Вот почему, когда сервер возвращает ответ, я получаю дублированные результаты.Могу ли я что-либо изменить в коде JavaScript или на стороне сервера, чтобы этого не произошло?Что-то не так с Dropzone вместо этого?

Чтобы было понятно: при загрузке 1 файла я получаю 1 ответ от сервера.Это правильно.Когда я загружаю 3 файла, я получаю 9 ответов от сервера, потому что сервер принимает его как каждый запрос, передающий 3 файла 3 раза.Это неправильно

Прилагается пример

enter image description here

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