Удалите выбранные файлы, нажав на ссылку удалить из входного файла несколько раз и отправьте в параметр контроллера - PullRequest
0 голосов
/ 28 декабря 2018

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

Прямо сейчас, даже если я нажму кнопку загрузки, точка остановадаст мне нулевое значение вместо имени файлов.

После нажатия кнопки отправки файлы, отображаемые на консоли (F12), исправны, но для точки останова в моем контроллере отображается ноль.

Что нужно сделать, чтобы отправить файлы вмой контроллер?

1 Ответ

0 голосов
/ 28 декабря 2018
  1. Ваш ajax-код отправляет файлы с именем fileList[], но ваш сервер ожидает параметр с именем parameterIsHere, а тип должен быть UploadFiles.
  2. Похоже, вы не отправляете токен CSRF

Как исправить:

Подход A:

  1. на стороне сервера: измените метод действия, как показано ниже (обратите внимание на тип и имя):

    [HttpPost]
    public IActionResult UploadAction(List<IFormFile> fileList)
    {
         // ...
    }
    
  2. на стороне клиента: добавьте маркер CSRF и изменитеимя поля должно быть fileList:

    function sendModifiesList(e) {
        e.preventDefault();
        fileList.forEach(function(file,idx) {
            formData.append(`fileList`, file);      //// name should be `fileList` 
        });
        formData.append("__RequestVerificationToken",$("form input[name='__RequestVerificationToken']").val());
        console.log("These files will be posted: ", formData.getAll("fileList"));
        /*************** EDIT *************************/
        // Get the url from the form's action attribute
        let url = document.forms[0].action;
        let request = new XMLHttpRequest();
        // Create a POST request
        request.open("POST", url);
        // Set up an onload handler to report status
        request.onload = function() {
            if (request.status == 200) {
                console.log("Uploaded!");
            } else {
                console.log("Error " + request.status + " occurred when trying to upload your file.");
            }
        };
        // Send the form to the server 
        request.send(formData);
        /************ END EDIT ***********************/
    };
    

Подход B:

, если вам все равно имя, выможно просто использовать HttpContext.Request.Form.Files для получения файлов:

    [HttpPost]
    public IActionResult UploadAction()
    {
         var files= HttpContext.Request.Form.Files;
         // ... 
    }
...