无法获得 _FILES 美元但获得 _SERVER 美元的文件

Unable to get file in $_FILES but getting in $_SERVER

本文关键字:美元 文件 SERVER FILES      更新时间:2023-09-26

(按照SO的要求澄清为什么我的问题没有与建议的帖子重复)

恕我直言,我的问题与该问题不重复,因为

  1. 我正在起诉JavaScript和Ajax,其中链接的问题没有
  2. 虽然我已经尝试了该帖子的解决方案,但
  3. 不起作用

我正在使用ajax

并发出ajax请求,我正在使用javaScript

.HTML

<input id="file" type="file" name="our-file" />
<input type="button" value="Upload" id="upload-button"   /> 

Js

var inputFile = document.getElementById("file"),
    uploadButton = document.getElementById("upload-button");
uploadButton.onclick = function () {
    console.log(inputFile.files[0])
    var file = inputFile.files[0];
    var httpRequest = new XMLHttpRequest();
    httpRequest.onreadystatechange = stateHandler;

    httpRequest.open("POST", "upload.php", true);
    httpRequest.setRequestHeader("X-File-Name", file.name);
    httpRequest.send(file)

    function stateHandler() {
        var status = {
            "httpRequest ready state": httpRequest.readyState,
            "status": httpRequest.status,
            "httpRequest responseText":httpRequest.responseText
        };
        console.log(status);
        console.log(httpRequest.responseText);
    }
}

现在当我尝试通过上传文件时$_FILES我得到空数组,但是 $_SERVER有完整的文件信息,是因为我只发送了标题而不是文件本身吗?

我的输出与$_SERVER https://i.stack.imgur.com/1GMdh.png
的尖叫声带有$_FILES https://i.stack.imgur.com/IECUt.png 的输出的屏幕截图

谢谢,我不想要jquery建议(我认为在它开发的框架之前了解语言是件好事:)

您正在发送原始文件数据。您不会发送multipart/form-data编码的请求,因此不会将其作为常规表单数据处理(因此不会填充$_FILES$_POST)。

创建表单数据对象。

var formData = new FormData();

将文件信息放入其中:

formData.append("myFile", inputFile.files[0]);

发送该:

request.send(formData);