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上传文件为空
Magento 图像文件上传器错误:$_FILES 数组为空