javascript - 无法使用 JS FormData 对象发布视频文件输入
问题描述
实际上,我做了很多研究并尝试了不同的方法来使用 JQuery$.ajax()
和FormData
. 我正在使用 Chrome 和 Firefox 的更新版本,并且知道使用jQuery 1.6$.ajax()
及更高版本可以上传文件。现在我正在使用jQuery-3.3.1.js
无论出于何种原因,我仍然无法使其工作。当我回显时,我得到一个空数据$_FILES['myFile']['name'];
视图.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>
视图.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);
}
}
});
}
上传视频.php
$myFile = $_FILES['myFile']['name'];
echo "myFile: " . $myFile;
echo "myFile: " . $myFile;
显示:
我的文件:
这一行:
console.log($('#modalBtn_choose_video_file')[0].files[0]); // console displays the selected file info.
向我显示所选文件的信息,我确定它不是空的。
我不知道缺少什么。它能够获取并运行 upload_video.php 脚本,但什么也没有$_FILES[]
我想重申,<form>
包含在modal div
中。我不知道这是否与问题有关。
请帮忙。我很感激任何建议。
谢谢你。
**** 编辑 ******
这就是我在XHR->Headers->Request Payload of Google's Developer Tools 中得到的。
请求有效载荷
------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
in$_FILES[][]
$myFile = $_FILES['file']['name'];
echo "myFile: " . $myFile;
但没有解决我的问题。
我还能做哪些其他故障排除?
******* 编辑结束 *******
解决方案
您正在file
属性中发送文件数据,而不是myFile
,因此您的 PHP 应更改为:
$myFile = $_FILES['file']['name']; // note 'file' here
echo "myFile: " . $myFile;
推荐阅读
- c++ - 以块的形式读取rocksdb中的值
- asp.net-core - Dotnetcore 装饰器没有被调用?
- pyspark - Pyspark 将十进制转换为日期
- php - 将 json 对象插入到 oracle db 表 blob 列中
- flask - 如何添加和检索密码而不将它们存储在服务器上
- python - Python:向函数内的可变对象添加属性
- http - 为什么 reqwest HTTP 库返回二进制数据而不是文本正文?
- r - R:避免使用for循环顺序选择一列中的值并使用另一列中的值向量应用函数
- function - lua中的十六进制函数是什么?
- html - Angular 应用程序视图中的 bootstrap 4 元素定位