handler
,它总是返回未设置$_FILES
的{{1}}。
JavaScript (在服务器www.example.com
上):
var file = document.getElementById("fileInput").files[0];
var formData = new FormData();
formData.append("track", file);
var xhr = new XMLHttpRequest();
xhr.open("POST", "//handle.example.com/uploads.php", true);
xhr.onload = function(){
if(xhr.status == 200)
// awesome, it worked
else
return console.error("Something went wrong.");
};
xhr.send(formData);
PHP (在服务器handle.example.com
上):
header("Access-Control-Allow-Origin: http://www.example.com", false);
if(isset($_FILES["track"])){
$file = $_FILES["track"];
$fileTemp = $file["tmp_name"];
$fileSize = filesize($fileTemp);
if($fileSize <= 150000000)
$data = "Success"; // this is returned if a file is an image file
} else
$data = "File not set."; // this is returned if a file is an audio file
echo $data;
exit;
HTML (在服务器www.example.com
上):
<form method="post" enctype="multipart/form-data" id="ulF_uF1">
<input type="file" name="file" accept="audio/x-aiff,audio/flac,audio/mpeg,audio/ogg,audio/wav" id="fileInput">
</form>
upload_max_filesize
和post_max_size
分别设置为150M
和151M
。$_FILES
更改为$_POST
这些都不对我有用,而且我似乎找不到其他与我的问题有关的可行解决方案,因此我们将不胜感激。
经过仔细的测试,我意识到我的上传脚本实际上运行良好。它不喜欢正在上传的文件类型。由于某些原因, PHP(至少是7.2.1版)不喜欢我上传音频文件的过程;上传图像文件或PDF
正常。
答案 0 :(得分:1)
xhr.setRequestHeader("Content-Type", "multipart/form-data");
格式为Content-Type
的请求的multipart/form-data
标头必须包含一个boundary
参数,以告知消息的接收者每新的数据位从哪里开始
通过手动提供不带标题的标题,您将使请求无法解析。
删除该行。允许XMLHttpRequest使用FormData对象为您生成正确的内容类型标头。