$ _FILES全局变量无法接收从XMLHttpRequest()发送的数据

时间:2016-06-24 16:09:32

标签: javascript php html xmlhttprequest asyncfileupload

我正在尝试使用XMLHttpRequest()和PHP将文件上传到服务器中的文件夹。 这是HTML文件fu2.html

<form action="fu2.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file" id="file"><br><br>
    <input type="button" value="Upload" onclick="loadFile()">
</form>
<script>
function loadFile() {

    var myFileList = document.getElementById("file").files;
    var fileToUpload = myFileList[0];
    alert(fileToUpload.name+","+fileToUpload.tmp_name);
    var xhr = new XMLHttpRequest();
    xhr.open("POST", 'http://10.192.44.143/pgadmsn/fu2.php',false);
    xhr.send(fileToUpload);
    alert(xhr.responseText);
}
</script>

php文件fu2.php是:

<?php
if(isset($_FILES["fileToUpload"])){
$name = $_FILES["fileToUpload"]["name"];
$tmp_name = $_FILES['fileToUpload']['tmp_name'];

if (isset ($name)) {
    if (!empty($name)) {

    $location = 'uploads/';

    if  (move_uploaded_file($tmp_name, $location.$name)){
        echo 'Uploaded';    
        }

        } else {
          echo 'please choose a file';
          }
    }
    else{
        echo "name not set";
    }
}
else echo "FILES not set!";
?>

我遇到了两个问题:

  1. alert(fileToUpload.name+","+fileToUpload.tmp_name);中,fileToUpload.tmp_name将未定义。

  2. 主要问题是在isset($_FILES["fileToUpload"])正在评估false的fu2.php文件中,因为FILES not set!xhr.responseText

  3. 我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

以下是缺陷:

1)。您引用了一个不存在的组件名称。该 $_FILES["file"] 不是 $_FILES["fileToUpload"]

2)。基本上您通过Ajax将二进制数据传输到服务器,您需要使用FormData对象将文件包装成可读流的机制。

我在这里修改了您的代码:

fu.html

<form action="fu2.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file" id="file"><br><br>
    <input type="button" value="Upload" onclick="loadFile()">
</form>
<script>
    function loadFile() {

        var myFileList = document.getElementById("file").files;
        var fileToUpload = myFileList[0];

        var fd = new FormData();
        fd.append("file", fileToUpload);
        alert(fileToUpload.name);
        var xhr = new XMLHttpRequest();
        xhr.open("POST", 'http://10.192.44.143/pgadmsn/fu2.php',false);
        xhr.send(fd);
        alert(xhr.responseText);
    }
</script>

fu.php

<?php
if(isset($_FILES["file"])){
    $name = $_FILES["file"]["name"];
    $tmp_name = $_FILES['file']['tmp_name'];

    if (isset ($name)) {
        if (!empty($name)) {

            $location = 'uploads/';

            if  (move_uploaded_file($tmp_name, $location.$name)){
                echo 'Uploaded';
            }

        } else {
            echo 'please choose a file';
        }
    }
    else{
        echo "name not set";
    }
}
else echo "FILES not set!";
?>