Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用JS FormData对象发布视频文件输入_Javascript_Php_Jquery_Form Data - Fatal编程技术网

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

Javascript 无法使用JS FormData对象发布视频文件输入,javascript,php,jquery,form-data,Javascript,Php,Jquery,Form Data,实际上,我做了很多研究,并尝试使用JQuery的$.ajax()和FormData上传视频文件。我正在使用Chrome和Firefox的更新版本,并且知道使用$.ajax()上传文件对于jQuery 1.6和更高版本是可能的。现在我正在使用jQuery-3.3.1.js 不管是什么原因,我还是不能让它工作。当我回显$\u文件['myFile']['name']时,我得到一个空数据 view.php <div class="modal_body"> <form class

实际上,我做了很多研究,并尝试使用JQuery的
$.ajax()
FormData
上传视频文件。我正在使用Chrome和Firefox的更新版本,并且知道使用
$.ajax()
上传文件对于jQuery 1.6和更高版本是可能的。现在我正在使用jQuery-3.3.1.js

不管是什么原因,我还是不能让它工作。当我回显
$\u文件['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>
$myFile = $_FILES['myFile']['name'];
echo "myFile: " . $myFile;
上传视频.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>
$myFile = $_FILES['myFile']['name'];
echo "myFile: " . $myFile;
echo“myFile:”$我的文件显示:

我的文件:

这一行:

console.log($('#modalBtn_choose_video_file')[0].files[0]); // console displays the selected file info.
向我显示所选文件的信息,我确信它不是空的

我不知道少了什么。它能够拾取并运行upload_video.php脚本,但在
$\u文件[]中什么也得不到

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

请帮忙。如果有任何建议,我将不胜感激

多谢各位

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

这就是我在谷歌开发者工具的XHR->Headers->Request Payload中得到的

请求有效负载

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

$('#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);
            }
        }
    });
}
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\u转储($\u文件)
var\u dump($\u POST)
但继续获取

NULL
数组(0){}

我还在
$\u FILES[][]

$myFile = $_FILES['file']['name'];
echo "myFile: " . $myFile;
但是没有解决我的问题

我还能做什么其他故障排除


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

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

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

当您检查XHR请求时,是否在请求中看到完整的负载?我在这里的怀疑是关于
内容类型的
header,所以不确定FormData单独使用时是否会自动指定正确的enctype。我将把它添加到表单中,然后简单地将表单传递给Formata构造函数。另外,对$_文件和$_POST进行var_转储以进行调试,并查看实际得到的结果。@RamRaider我检查了XHR请求负载,并且能够看到我选择的文件的文件名。我已经在上面添加了请求有效负载结果。还有其他建议吗?@CBroe我尝试了你的建议,但我一直得到
NULL
array(0){}
我已经添加了上面的编辑。还有其他建议吗?谢谢。请尝试
var formData=new formData($('modalForm_uploadVideo')[0]),并删除尝试手动追加内容的任何其他内容。