无法获取$ _FILES中的文件但是获得$ _SERVER

时间:2015-03-11 09:03:01

标签: javascript php ajax

(如此要求澄清为什么我的问题不与建议的帖子重复)

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

  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 http://i.stack.imgur.com/1GMdh.png扫描我的输出结果 使用$_FILES http://i.stack.imgur.com/IECUt.png

    对我的输出进行屏幕截图

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

1 个答案:

答案 0 :(得分:2)

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

创建表单数据对象。

var formData = new FormData();

将文件信息放在:

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

发送:

request.send(formData);