На самом деле я провел много исследований и пробовал разные способы загрузки видеофайла с помощью 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;
но ничего не сделал, чтобы исправить мою проблему.
Что еще я могу сделать для устранения неполадок?
******* конец редактирования *******
Также не уверен, будет ли сама FormData автоматически указывать правильный enctype при использовании таким образом. Я бы добавил это в форму, а затем просто передал форму конструктору Formata. Кроме того, сделайте var_dump как $ _FILES, так и $ _POST, чтобы отладить и посмотреть, что вы действительно получите.
@RamRaider Я проверил полезную нагрузку запроса XHR и вижу имя файла, который я выбрал. Я добавил результаты запроса полезной нагрузки выше. Есть другие предложения?
@CBroe Я попробовал ваше предложение, но продолжаю получать NULL или array(0){}. Я добавил правки выше. Любое другое предложение? Спасибо.
Попробуйте var formData = new FormData( $('#modalForm_uploadVideo')[0] ); и удалите все, что вы пытаетесь добавить вручную.
Я только что нашел причину, по которой он всегда возвращает null. Я перешел на ОС Windows с Ubuntu, и она показала ошибку. Проблема была просто из-за post_max_size :( Мне не пришлось тратить так много времени. Спасибо за вашу помощь.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы отправляете данные файла в свойстве file, а не в myFile, поэтому ваш PHP должен быть изменен на это:
$myFile = $_FILES['file']['name']; // note 'file' here
echo "myFile: " . $myFile;
когда вы проверяете запрос XHR, видите ли вы полную полезную нагрузку в запросе? Подозрение, которое у меня было, было связано с заголовком
Content-Type.