HTML5拖拽上传文件
很早就在博客园看到过利用HTML5拖放上传文件功能的文章,一直没机会自己试一试,今天心血来潮也试了下,参考了4、5个网站,东拼西凑终于实现了,效果如下:http://yilee.info/media/html5-drag-drop-pic/upload.html
如何实现,一共四个步骤:
一浏览器检测
大致有两种方法
第一个是幸福收藏夹里讲的window.FileReader
if (window.FileReader) {
alert('ok');
} else {
alert('no');
}
还有一种是用jquery检测浏览器加版本
if($.browser.msie){ alert("Microsoft Internet Explorer");}
if($.browser.mozilla){ alert("Mozilla Firefox");}
if($.browser.msie){ alert($.browser.version);}
二监听拖拽
要想实现拖拽,首页需要阻止浏览器默认行为,一个四个事件。
//拖离
dragleave: function(e) {
e.preventDefault();
$('.dashboard_target_box').removeClass('over');
},
//拖进
dragenter: function(e) {
e.preventDefault();
$('.dashboard_target_box').addClass('over');
},
//拖来拖去
dragover: function(e) {
e.preventDefault();
$('.dashboard_target_box').addClass('over');
},
var box = document.getElementById('target_box');
//丢。。。
box.addEventListener('drop',
function(e) {
e.preventDefault();
}
);
一定要将dragover的默认事件取消掉,不然无法触发drop事件。
三得到文件列表
var fileList = e.dataTransfer.files;
四Ajax上传文件
可以按需求检测一下文件格式再上传
首先新建一个XHR请求
xhr = new XMLHttpRequest();
xhr.onreadystatechange = callback;
xhr.open("post", "test.php", true);
//异步请求
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
//上传完毕事件
xhr.addEventListener("load",
function(e) {
$('.dashboard_target_box').removeClass('over');
},
false);
var fd = new FormData();
fd.append('file', fileList[i]);
xhr.send(fd);
上面绑定的事件是上传完毕
callback是回调函数
function callback() {
if (xhr.readyState == 4 && xhr.status == 200) {
alert("服务端信息:" + xhr.responseText);
}
}
readyState 有五种状态,4才代表上传完毕,具体可以参考readyState的五种状态详解
给个PHP简单的代码:
效果如下:
鼠标dropover事件:
上传完毕,服务器返回信息: