无法使用JS FormData对象发布视频文件输入

时间:2018-07-10 06:32:41

标签: javascript php jquery form-data

我实际上做了很多研究,并尝试了不同的方法来使用JQuery的$.ajax()FormData上传视频文件。我使用的是Chrome和Firefox的更新版本,并且意识到 jQuery 1.6 及更高版本可以使用$.ajax()上传文件。现在,我正在使用 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.log($('#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.log(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.log($('#modalBtn_choose_video_file')[0].files[0]); // console displays the selected file info.

向我显示了所选文件的信息,并且我确定它不是空的。

我不知道缺少什么。它可以启动并运行upload_video.php脚本,但在$_FILES[]

中什么也没得到

我想重申<form>包含在模式 div中。我不知道这是否与问题有关。

请帮助。我将不胜感激任何建议。

谢谢。

****编辑******

这是我在Google开发人员工具的 XHR->标题->请求有效载荷中得到的。

请求有效载荷

------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),但不断添加

NULLarray(0){}

我还在myFile中用file替换了$_FILES[][]

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

但是没有解决我的问题。

我还可以进行其他故障排除吗?

*******编辑结束*******

1 个答案:

答案 0 :(得分:1)

您是在file属性而不是myFile属性中发送文件数据,因此您的PHP应该更改为此:

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