Невозможно выполнить POST-ввод видеофайла с помощью объекта JS FormData

На самом деле я провел много исследований и пробовал разные способы загрузки видеофайла с помощью JQuery $.ajax() и FormData. Я использую обновленную версию Chrome и Firefox и знаю, что загрузка файла с помощью $.ajax() возможна для jQuery 1.6 и выше. Щас использую jQuery-3.3.1.js

По какой-то причине я все еще не могу заставить его работать. Когда я повторяю $_FILES['myFile']['name'];, я получаю пустые данные

view.php

<div class = "modal_body">
    <form class = "container_UserInfo" id = "modalForm_uploadVideo">
        <label class = "modal_label" id = "modalLbl_browseVideo">
        Select Video
        <input type = "file" name = "myFile" class = "modalbtn_browseFiles" id = "modalBtn_choose_video_file" value = "Select Video" accept = "video/*"/><br>
        </label>
    </form>
</div>

<button class = "btn_modalFooter" id = "modalBtn_uploadVideo_upload" name = "modalBtnName_uploadVideo_upload">
    Upload
</button>

view.js

$('#modalBtn_uploadVideo_upload').on('click',function(event){
    if (hasInputFileLoaded()){
        uploadVideo();
    }else{
        alert("No file input.");   
    }
});

function uploadVideo() {
    var formData = new FormData();
    formData.append('file', $('#modalBtn_choose_video_file')[0].files[0]);
    console.info($('#modalBtn_choose_video_file')[0].files[0]); // console displays the selected file info.
    $.ajax({
        url: 'controller/upload_video.php',
        type: 'POST',
        data: formData,
        processData: false,  // tells jQuery not to process the data
        contentType: false,  // tells jQuery not to set contentType
        success: function (data) {
            console.info(data);
            alert(data);
        },
        error: function (x, e) {
            if (x.status == 0) {
                alert('You are offline!!\n Please Check Your Network.');
            } else if (x.status == 404) {
                alert('Requested URL not found.');
            } else if (x.status == 500) {
                alert('Internal Server Error.');
            } else if (e == 'parsererror') {
                alert('Error.\nParsing JSON Request failed.');
            } else if (e == 'timeout') {
                alert('Request Time out.');
            } else {
                alert('Unknown Error.\n' + x.responseText);
            }
        }
    });
}

upload_video.php

$myFile = $_FILES['myFile']['name'];
echo "myFile: " . $myFile;

echo "myFile: " . $myFile; отображает:

myFile:

Эта строка:

console.info($('#modalBtn_choose_video_file')[0].files[0]); // console displays the selected file info.

показывает мне информацию о файле, который был выбран, и я уверен, что он не пустой.

Я не знаю, чего не хватает. Он может взять и запустить скрипт upload_video.php, но ничего не получает в $_FILES[].

Я хотел бы повторить, что <form> содержится в модальныйdiv. Я не знаю, связано ли это с проблемой.

Пожалуйста помоги. Буду признателен за любое предложение.

Спасибо.

**** РЕДАКТИРОВАТЬ ******

Это то, что я получаю в XHR-> Заголовки-> Запросить полезную нагрузку инструментов разработчика Google.

Запросить полезную нагрузку

------WebKitFormBoundarybqKoBuiQ9WumYuTo
Content-Disposition: form-data; name = "file"; filename = "How to Configure Nginx VirtualHost in Ubuntu.mp4"
Content-Type: video/mp4

А для Заголовки запроса

Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Content-Length: 20360818
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarybqKoBuiQ9WumYuTo
Cookie: PHPSESSID=q669bu6jqodkpqpvu2hructsm7
Host: localhost
Origin: http://localhost
Referer: http://localhost/cai/landingpage.php
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
X-Requested-With: XMLHttpRequest

Я добавил enctype = "multipart/form-data" method = "post", как было предложено, и var_dump($_FILES); и var_dump($_POST), но продолжаю получать

NULL или array(0){}

Я также заменил myFile на file в $_FILES[][]

$myFile = $_FILES['file']['name'];
echo "myFile: " . $myFile;

но ничего не сделал, чтобы исправить мою проблему.

Что еще я могу сделать для устранения неполадок?

******* конец редактирования *******

когда вы проверяете запрос XHR, видите ли вы полную полезную нагрузку в запросе? Подозрение, которое у меня было, было связано с заголовком Content-Type.

Professor Abronsius 10.07.2018 08:40

Также не уверен, будет ли сама FormData автоматически указывать правильный enctype при использовании таким образом. Я бы добавил это в форму, а затем просто передал форму конструктору Formata. Кроме того, сделайте var_dump как $ _FILES, так и $ _POST, чтобы отладить и посмотреть, что вы действительно получите.

CBroe 10.07.2018 08:49

@RamRaider Я проверил полезную нагрузку запроса XHR и вижу имя файла, который я выбрал. Я добавил результаты запроса полезной нагрузки выше. Есть другие предложения?

jordan 10.07.2018 11:14

@CBroe Я попробовал ваше предложение, но продолжаю получать NULL или array(0){}. Я добавил правки выше. Любое другое предложение? Спасибо.

jordan 10.07.2018 11:15

Попробуйте var formData = new FormData( $('#modalForm_uploadVideo')[0] ); и удалите все, что вы пытаетесь добавить вручную.

CBroe 10.07.2018 11:19

Я только что нашел причину, по которой он всегда возвращает null. Я перешел на ОС Windows с Ubuntu, и она показала ошибку. Проблема была просто из-за post_max_size :( Мне не пришлось тратить так много времени. Спасибо за вашу помощь.

jordan 10.07.2018 16:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
2 493
1

Ответы 1

Вы отправляете данные файла в свойстве file, а не в myFile, поэтому ваш PHP должен быть изменен на это:

$myFile = $_FILES['file']['name']; // note 'file' here
echo "myFile: " . $myFile;

Другие вопросы по теме