我正在开发一个简单的脚本以通过AJAX上传文件,但是在提交表单后,变量$ _FILES完全为空,尽管该文件存在于php:// input中,但是没有简单的方法仅提取该文件。有人知道这个问题的原因和/或解决方案吗?
我已经检查了所有常见的解决方案。 enctype =“ multipart / form-data” 临时文件夹的权限 表单标签关闭 双引号 以及JS中文件输入的输出
没有什么能解决我的问题。
红色 这不是jquery,而且我在24小时内都没有找到重复项。因此,除非您确定它是一个,否则请不要将其标记为重复。
HTML
<form action="upload.php" method="POST" enctype="multipart/form-data" id="testf">
<input type="file" name="file" accept=".jpg">
<input type="submit" value="Skicka">
</form>
JavaScript
let data = document.querySelector("#testf");
data.onsubmit = function() {
var http = new XMLHttpRequest();
http.open("upload.php", data.action);
http.onreadystatechange = function () {
console.log(http.response);
}
http.setRequestHeader("Content-type", data.enctype);
http.send(new FormData(data));
event.preventDefault();
return false;
}
PHP
<?php
var_dump($_FILES);
?>
这应该打印我文件的内容,但是
array(0) {}
我所能得到的。 请求有效负载为:
------WebKitFormBoundaryZVGq8suqFUUSFDtW
Content-Disposition: form-data; name="file"; filename="david.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryZVGq8suqFUUSFDtW--
答案 0 :(得分:1)
您的JavaScript方法XMLHttpReqest存在问题。它至少需要两个参数:Method和url。 完整参数为:方法,URL,异步,用户,密码
从以下位置更改代码:
http.open("upload.php", data.action);
收件人:
http.open("post", data.action );
更新: 还要删除
http.setRequestHeader("content-type", "multipart/form-data")
表单数据已经为内容类型设置了标头。
答案 1 :(得分:-1)
您是否检查了内存限制是否在php中设置为-1或足够高。 有时,在Apache或iis服务器上,高文件上传也受阻。