Javascript php ajax文件上载,$\u文件为空
我有一个blob对象,需要将一些数据发布到fileHandler.php 所以我将它们打包到FormData中:Javascript php ajax文件上载,$\u文件为空,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个blob对象,需要将一些数据发布到fileHandler.php 所以我将它们打包到FormData中: console.log("start saving"); var url1 = URL.createObjectURL(blob); var url2 = "data:application/octet-stream," + encodeURIComponent(JSON.stringify(dataPack)); co
console.log("start saving");
var url1 = URL.createObjectURL(blob);
var url2 = "data:application/octet-stream," + encodeURIComponent(JSON.stringify(dataPack));
console.log(url1);
console.log(url2);
fd.append('realName', dataPack.name);
fd.append("ans", JSON.stringify(dataPack.ans));
fd.append("log", JSON.stringify(dataPack.log));
fd.append("part", dataPack.part);
fd.append('fileToUpload', blob);
window.postData = fd;
并通过ajax上传:
$.ajax({
type: 'POST',
url: '../php/fileHandler.php',
data: postData,
processData: false,
contentType: false,
success: function() {
uploadSuccess();
},
error: function() {
uploadFail();
},
progress: function(e) {
console.log(e);
//make sure we can compute the length
if(e.lengthComputable) {
//calculate the percentage loaded
var pct = parseInt((e.loaded / e.total) * 100);
//log percentage loaded
$('#uploadProgress').width(pct+"%").text(pct+"%");
console.log(pct);
}
//this usually happens when Content-Length isn't set
else {
console.warn('Content Length not reported!');
}
}
}).done(function(data) {
console.log(data);
if(data ==="ok") {
uploadSuccess();
}
else {
uploadFail();
}
});
php文件处理程序:
<?php
$target_dir = "uploads/";
$realName = trim($_POST['realName']);
$part = $_POST['part'];
$ans = json_decode($_POST['ans']);
$log = json_decode($_POST['log']);
$fileNameNoEx = $target_dir . $realName . "-" . $part ."-". time();
$target_file = $fileNameNoEx . ".mp3";
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
//save files
$f = fopen($fileNameNoEx.".txt", "w");
fwrite($f, "Answer log:\n");
foreach ($ans as $page => $val) {
fwrite($f, "$page : $val\n");
}
fwrite($f, "\nPage switching event log:\n");
foreach ($log as $l) {
fwrite($f, "{$l->time}s ---> {$l->page}\n");
}
fclose($f);
echo "ok";
} else {
var_dump($ans);
var_dump($log);
var_dump($_POST);
var_dump($_FILES);
var_dump($target_file);
echo "asdsad";
echo "Sorry, there was an error uploading your file.";
}
}
postData似乎是空的?但当我在浏览器控制台中检查postData时:
> postData.get("fileToUpload")
File {name: "blob", lastModified: 1500101804839, lastModifiedDate: Sat Jul 15 2017 14:56:44 GMT+0800 (China Standard Time), webkitRelativePath: "", size: 12597888…}
> postData.get("realName")
"jjj"
为什么????$\u FILES[]和$\u POST[]如何有效
当文件非常大时,经常会出现此问题。PHP有一个最大post大小,请尝试增加它:
如果PHP没有这个限制,我可以向您的web服务器发送无限大的帖子,直到它的磁盘或RAM用完。您可以调用window.postData=fd;然后使用data:postData,,您确定正确访问了它吗?根据代码所在的位置,postData可能不是您期望的值scope@DelightedD0D我已经检查了控制台中的window.postData,它肯定存在。当然,但您没有使用window.postData。您只使用了此行中的postData:data:postData,。如果使用data:window.postData,会发生什么情况?不确定它是否在代码中起作用,这取决于代码的位置,您的代码可能在哪里fine@DelightedD0D我已经将postData更改为window.postData,并在控制台中再次测试ajax,但问题仍然存在。是的,没错!我只修改了上传最大文件大小错误忘记了上传最大文件大小!谢谢!
> postData.get("fileToUpload")
File {name: "blob", lastModified: 1500101804839, lastModifiedDate: Sat Jul 15 2017 14:56:44 GMT+0800 (China Standard Time), webkitRelativePath: "", size: 12597888…}
> postData.get("realName")
"jjj"