AJAX 上传后 $_FILES 为空

Posted

技术标签:

【中文标题】AJAX 上传后 $_FILES 为空【英文标题】:$_FILES empty after AJAX upload 【发布时间】: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--

【问题讨论】:

jQuery Ajax File Upload的可能重复 OP 没有使用 jQuery。 不重复。用 js 编写,而不是 jquery。 【参考方案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。

以上是关于AJAX 上传后 $_FILES 为空的主要内容,如果未能解决你的问题,请参考以下文章

Python烧瓶使用ajax request.files上传文件为空

在 PHP 中上传时 $_FILES 为空

Magento 图像文件上传器错误:$_FILES 数组为空

$_FILES 数组在不上传任何内容时不为空

$_files 在 Phonegap/Cordova 中的图像上传中为空 [关闭]

使用PHP处理POST上传时$_FILES数组为何为空