2019-07-03 21:56 阅读 349


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.


<form action="upload.php" method="POST" enctype="multipart/form-data" id="testf">
<input type="file" name="file" accept=".jpg">
<input type="submit" value="Skicka">


let data = document.querySelector("#testf");
data.onsubmit = function() {
    var http = new XMLHttpRequest();"upload.php", data.action);
    http.onreadystatechange = function () {
    http.setRequestHeader("Content-type", data.enctype);
    http.send(new FormData(data));
    return false;



This should print the contents of my file, but

array(0) {}

is all I get. Request payload is:

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    dongsashe6006 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:"upload.php", data.action);

    To:"post", data.action );

    Update: Also remove

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

    Form data already sets its headers for content-type.

    点赞 评论 复制链接分享
  • dongyong3554 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.

    点赞 评论 复制链接分享