douqudi5282
2019-07-03 21:56
浏览 421

AJAX上传后$ _FILES为空

I'm developing a simple script to upload a file through AJAX but after form submission, the variable $_FILES is completely empty, although the file exists within php://input, but with no simple way to extract only the file. Anyone knows the reason and/or solution to this problem?

I've checked all the common solutions. enctype="multipart/form-data" rights to temp folder form-tags closing doublequotations and the output of the file-input in JS

Nothing has solved my problem.

RED This is NOT jquery, and I haven't found a duplicate in 24h. So please don't mark as duplicate unless you're sure it is one.

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);
?>

This should print the contents of my file, but

array(0) {}

is all I get. Request payload is:

------WebKitFormBoundaryZVGq8suqFUUSFDtW
Content-Disposition: form-data; name="file"; filename="david.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryZVGq8suqFUUSFDtW--

图片转代码服务由CSDN问答提供 功能建议

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

我已经检查了所有常见的解决方案。 nctype =“multipart / form-data” rights to temp folder form- 标签关闭 doublequotations 和JS中文件输入的输出

没有什么能解决我的问题。

RED 这不是jquery,我在24小时内没有找到重复内容。 所以请不要将其标记为重复,除非您确定它是一个。

HTML

   &lt; form action =“upload.php”method =“POST”enctype =“multipart / form-data”id =“testf”&gt; 
&lt; input type =“file”name =“file”accept =“。jpg  “&gt; 
&lt; input type =”submit“value =”Skicka“&gt; 
&lt; / form&gt; 
   
 
 

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

 <代码>&LT; PHP中
var_dump($ _ FILES); 
&GT;吗?
   
  
 

这应该打印我文件的内容,但是

  array(0){} 
   
 
 < 我只得到了。  
请求有效负载是: 
 
 
  ------ WebKitFormBoundaryZVGq8suqFUUSFDtW 
Content-Disposition:form-data;  NAME = “文件”;  filename =“david.jpg”
Content-Type:image / jpeg 
 
 
 ------ WebKitFormBoundaryZVGq8suqFUUSFDtW  -  
   
 
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongsashe6006 2019-07-03 22:11
    已采纳

    You have a problem with your JavaScript method XMLHttpReqest. It takes at least two parameters: Method and url. Full parameters are:method, url, async, user, password

    Change your code from:

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

    To:

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

    Update: Also remove

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

    Form data already sets its headers for content-type.

    点赞 评论
  • dongyong3554 2019-07-03 22:57

    Did you checked if memory limit is set to -1 or high enough in php. Sometime on Apache or iis server, there is also a block on high file uploads.

    点赞 评论

相关推荐 更多相似问题