【问题标题】:$_FILES empty after AJAX uploadAJAX 上传后 $_FILES 为空
【发布时间】:2019-11-14 15:10:22
【问题描述】:

我正在开发一个简单的脚本来通过 AJAX 上传文件,但是在表单提交之后,变量 $_FILES 是完全空的,虽然文件存在于 php://input 中,但是没有简单的方法来仅提取文件.有人知道这个问题的原因和/或解决方案吗?

我检查了所有常见的解决方案。 enctype="多部分/表单数据" 临时文件夹的权限 表单标签关闭 双引号 以及 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--

【问题讨论】:

标签: javascript php ajax


【解决方案1】:

您的 JavaScript 方法 XMLHttpReqest 有问题。它至少需要两个参数:Method 和 url。 完整参数为:method、url、async、user、password

从以下位置更改您的代码:

 http.open("upload.php", data.action);

收件人:

 http.open("post", data.action );

更新: 同时删除

http.setRequestHeader("content-type", "multipart/form-data")

表单数据已经为内容类型设置了标题。

【讨论】:

  • 参考见XMLHttpRequest.open()
  • 我没有在原始代码上做那个开关,但不幸的是,结果仍然没有区别。
  • 尝试注释掉setReuestHeader。给我反馈
  • 请把答案标记为正确。也更新了。
  • 抱歉,是这样。我不知道浏览器自己将内容类型标头设置为相应的表单数据,以便 php 可以接收它。内容类型:multipart/form-data;边界=----WebKitFormBoundaryaOHix0yHdFVLGFaG 而不仅仅是: Content-Type: multipart/form-data;谢谢!
【解决方案2】:

您是否检查过内存限制是否在 php.ini 中设置为 -1 或足够高。 有时在 Apache 或 iis 服务器上,也有阻止高文件上传。

【讨论】:

  • 已检查。这是小文件,限制设置为 128M。
猜你喜欢
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 2015-02-04
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2014-08-23
相关资源
最近更新 更多