我正在尝试使用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!";
?>


我面临两个问题:


alert(fileToUpload.name+","+fileToUpload.tmp_name);中,fileToUpload.tmp_name不确定。
主要问题是在fu2.php文件中,其中isset($_FILES["fileToUpload"])评估为false,因为我将FILES not set!用作xhr.responseText


我在这里做错了什么?

最佳答案

这是缺点:

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!";
?>

关于javascript - $ _FILES全局变量无法接收从XMLHttpRequest()发送的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38017724/

10-09 12:41