Php 未收到来自$\u文件的数据

Php 未收到来自$\u文件的数据,php,javascript,jquery,Php,Javascript,Jquery,我使用html5 dropzone与javascript一起上传图像 var dropZone = $('#dropZone'), maxFileSize = 1000000, img_id = 0; // if (typeof (window.FileReader) == 'undefined') { dropZone.text('NO BROWSER SUPPORT!'); dropZone.addClass('error'); } // dropZo

我使用html5 dropzone与javascript一起上传图像

var dropZone = $('#dropZone'),
    maxFileSize = 1000000,
    img_id = 0;

// 
if (typeof (window.FileReader) == 'undefined') {
    dropZone.text('NO BROWSER SUPPORT!');
    dropZone.addClass('error');
}

// 
dropZone[0].ondragover = function () {
    dropZone.addClass('hover');
    return false;
};

// 
dropZone[0].ondragleave = function () {
    dropZone.removeClass('hover');
    return false;
};

// 
dropZone[0].ondrop = function (event) {
    event.preventDefault();
    dropZone.removeClass('hover');
    dropZone.addClass('drop');

    var file = event.dataTransfer.files[0];

    // 
    if (file.size > maxFileSize) {
        dropZone.text('SO BIG FILE!');
        dropZone.addClass('error');
        return false;
    }

    // 
    var xhr = new XMLHttpRequest();
    xhr.upload.addEventListener('progress', uploadProgress, false);
    xhr.onreadystatechange = stateChange;
    xhr.open('POST', '/admin/admin.api.php');
    xhr.setRequestHeader('X-FILE-NAME', file.name);
    xhr.send(file);
};

// 
function uploadProgress(event) {
    var percent = parseInt(event.loaded / event.total * 100);
    dropZone.text('Загрузка: ' + percent + '%');
}

// 
function stateChange(event) {
    if (event.target.readyState == 4) {
        if (event.target.status == 200) {
            dropZone.text('SUCCESS!');
        } else {
            dropZone.text('FAIL!');
            dropZone.addClass('error');
        }
    }

}
标题和数据:

Request URL:http://***.com/admin/admin.api.php
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:uk-UA,uk;q=0.8,ru;q=0.6,en-US;q=0.4,en;q=0.2
Connection:keep-alive
Content-Length:86016
Content-Type:image/jpeg
Host:***.com
Origin:http://***.com
Referer:http://***.com/admin/
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36
X-FILE-NAME:image.jpeg
Response Headersview source
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:132
Content-Type:text/html
Date:Thu, 29 Aug 2013 19:29:00 GMT
Keep-Alive:timeout=15, max=100
Server:Apache/2.2.16 (Debian)
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.3-7+squeeze16
php脚本

    <?
    print_r($_POST);
print_r($_GET);
print_r($_FILES);
    ?>

返回


Array()Array()Array()

只有当您以多部分表单数据的形式发送文件时,才会填充
$\u文件
数组,而您没有这样做,请尝试使用


您为什么要手动执行XHR设置而不是使用jQuery?通过AJAX发送文件是可能的,但只有在最近的浏览器中。对于跨浏览器支持,您必须使用旧式(同步)请求(您可以使用
iframes
),或者将数据作为文本发送并在服务器上处理。@Dave OP使用的是HTML5 FileApi,因此我认为XHR2不会成为问题。@Musa啊,是的。很公平。请注意:除了最新的IE之外,这对任何东西都不起作用(显然,它在所有其他浏览器中都可以正常工作):
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', uploadProgress, false);
xhr.onreadystatechange = stateChange;
xhr.open('POST', '/admin/admin.api.php');
var formData = new FormData();
formData.append('file', file);
xhr.send(formData);