AJAX上传后$ _FILES为空

时间:2019-07-03 21:56:58

标签: javascript php ajax

我正在开发一个简单的脚本以通过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--

2 个答案:

答案 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服务器上,高文件上传也受阻。