Php 未收到来自$\u文件的数据
我使用html5 dropzone与javascript一起上传图像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
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);