ASP.NET Основные проблемы Dropzone

#javascript #html #asp.net-core

#javascript #HTML #asp.net-ядро

Вопрос:

Я пытаюсь загрузить файлы с помощью Dropzone и ASP.Net основной сайт. Код выполняется без ошибок и приводит меня к успешной странице, поэтому я не знаю, что делать. Мой код приведен ниже: HTML:

             <form id="newNotice" class="newNotice" method="post" action="https://localhost:5003/api/Attach" enctype="multipart/form-data">
                <input class="fill-width input" type="text" id="newposttitle" placeholder="Title" required />
                <select id="Cat" class="fill-width input">
                    <option value="">Select what Category this KB article applies to</option>
                    <option value="0">SIMS.Net</option>
                    <option value="1">SEN</option>
                    <option value="2">PC amp; On-site Services</option>
                    <option value="3">Office 365</option>
                    <option value="4">OneDrive amp; SharePoint</option>
                    <option value="5">IT Support</option>
                </select>
                <textarea id="details" class="fill-width" placeholder="Full Details" style="height: 100%;"></textarea>
                <div class="dropzone" id="dropzone">
                    <div class="dropzone-previews"></div>
                </div>
                <input type="submit" style="width: 100%;" value="Save" class="fill-width" onclick="validate()">
            </form>
  

JS:

             Dropzone.options.dropzone = { // The camelized version of the ID of the form element

                // The configuration we've talked about above
                url: "#",
                autoProcessQueue: false,
                uploadMultiple: false,
                parallelUploads: 100,
                maxFiles: 100,
                paramName: "files",
                addRemoveLinks: true,
                // The setting up of the dropzone
                init: function () {
                    var myDropzone = this;
                }
            }
  

Ниже JS используется для обработки очереди:

                             var myDropzone = Dropzone.forElement(".dropzone");
                            myDropzone.processQueue();
  

ASP:

         public async Task<IActionResult> Attach([FromForm]IList<IFormFile> files)
        {
            try
            {
                string absolutepath = _hostEnvironment.WebRootPath;
                Path.Combine(absolutepath, "Attachments");

                foreach (var file in files)
                {
                    try
                    {
                        var uploads = Path.Combine(absolutepath, file.FileName);
                        using (var fileStream = new FileStream(uploads, FileMode.Create))
                        {
                            await file.CopyToAsync(fileStream);
                        }
                        
                    } catch (Exception ex)
                    {
                        return BadRequest(ex.Message);
                    }
                }
                return RedirectToAction("~/results.html");

            }
            catch (Exception exception)
            {
                //  return BadRequest(new { success = false, message = "Error file failed to upload" });
                return BadRequest(exception.Message);
            }
        }
  

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

Комментарии:

1. В дополнение к этому, кажется, что Dropzone не передает файлы на мой контроллер.

Ответ №1:

Насколько я знаю, dropzone автоматически обнаружит элемент формы или связанный с dropzone элемент для создания dropzone div.

Поскольку ваше действие формы установило значение действия, а Dropzone.options также установил URL-адрес, это означает, что оно выдаст ошибку, которая No URL provided ошибка.

Поскольку я не знаю, каковы ваши фактические требования. Если вы не хотите использовать URL-адрес действия формы, вы можете установить его в атрибуте URL-адреса Dropzone.options и отключить этот autoDiscover атрибут.

Более подробную информацию вы можете найти в приведенном ниже примере:

 <form id="newNotice" class="newNotice" method="post" action="https://localhost:44350/api/Attach" enctype="multipart/form-data">
    <input class="fill-width input" type="text" id="newposttitle" placeholder="Title" required />
    <select id="Cat" class="fill-width input">
        <option value="">Select what Category this KB article applies to</option>
        <option value="0">SIMS.Net</option>
        <option value="1">SEN</option>
        <option value="2">PC amp; On-site Services</option>
        <option value="3">Office 365</option>
        <option value="4">OneDrive amp; SharePoint</option>
        <option value="5">IT Support</option>
    </select>
    <textarea id="details" class="fill-width" placeholder="Full Details" style="height: 100%;"></textarea>
    <div class="dropzone" id="dropzone">
        <div class="dropzone-previews"></div>
    </div>

    <input type="button" style="width: 100%;" value="Upload" class="fill-width" onclick="upload()">
    <input type="submit" style="width: 100%;" value="Save" class="fill-width" onclick="validate()">



</form>

<script>
    Dropzone.options.dropzone = { // The camelized version of the ID of the form element

        // The configuration we've talked about above
        url: "https://localhost:44350/api/Attach",
        autoProcessQueue: false,
        uploadMultiple: false,
        autoDiscover : false,
        parallelUploads: 100,
        maxFiles: 100,
        paramName: "files",
        addRemoveLinks: true,
        // The setting up of the dropzone
        init: function () {
            var myDropzone = this;
        }
    }
  

    function upload() {
        var myDropzone = Dropzone.forElement(".dropzone");
        myDropzone.processQueue();
    }
</script>
  

Обратите внимание: я добавляю новую кнопку для запуска метода processQueue.

Результат:

введите описание изображения здесь

Комментарии:

1. Добавление URL-адреса в dropzone и удаление его из формы сделали свое дело. Спасибо!