龙空技术网

JavaScript 文件拖拽上传

寒笛过霜天 138

前言:

现在姐妹们对“ajax提交文件到服务器怎么办”大致比较着重,咱们都需要学习一些“ajax提交文件到服务器怎么办”的相关资讯。那么小编在网摘上网罗了一些对于“ajax提交文件到服务器怎么办””的相关内容,希望各位老铁们能喜欢,你们快快来了解一下吧!

文件拖拽上传

使用HTML5的文件API, 可以将操作系统中的文件拖放到浏览器的指定区域, 实现文件上传到服务器。本文将结合实例讲解HTML5+jQuery+PHP实现拖拽上传图片的过程, 来看下HTML5的魅力吧。

HTML

我们在页面中放置一个拖拽区域#drop_area, 即接收拖拽的区域, #preview用来预览拖拽上传的图片信息。

<div id="drop_area">将图片拖拽到此区域</div><div id="preview"></div>

Javascript

要想实现拖拽, 页面需要阻止浏览器默认行为, 即四个事件(拖离、拖后放、拖进、拖来拖去), 因为我们要阻止浏览器默认将图片打开的行为, 这里我们使用jQuery来完成。

$(function(){//阻止浏览器默认行。$(document).on({    dragleave:function(e){ //拖离    e.preventDefault();},drop:function(e){ //拖后放    e.preventDefault();},dragenter:function(e){ //拖进    e.preventDefault();},dragover:function(e){ //拖来拖去    e.preventDefault();}});...});

接下来我们来了解下文件API。HTML5的文件API有一个FileList接口, 它可以通过e.dataTransfer.files拖拽事件传递的文件信息, 获取本地文件列表信息

var fileList = e.dataTransfer.files;

在本例中, 我们用javascript来侦听drop事件, 首先要判断拖入的文件是否符合要求, 包括图片类型、大小等, 然后获取本地图片信息, 实现预览, 最后上传。

$(function(){/// ...接上部分var box = document.getElementById('drop_area'); //拖拽区域box.addEventListener("drop",function(e){e.preventDefault(); //取消默认浏览器拖拽效果var fileList = e.dataTransfer.files; //获取文件对象//检测是否是拖拽文件到页面的操作if(fileList.length == 0){    return false;}//检测文件是不是图片if(fileList[0].type.indexOf('image') === -1){alert("您拖的不是图片!");return false;}//拖拉图片到浏览器,可以实现预览功能var img = window.URL.createObjectURL(fileList[0]);var filename = fileList[0].name; //图片名称var filesize = Math.floor((fileList[0].size)/1024);if(filesize>500){alert("上传大小不能超过500K.");return false;}var str = "<img src='"+img+"'><p>图片名称:"+filename+"</p><p>大小:"+filesize+"KB</p>";$("#preview").html(str);//上传xhr = new XMLHttpRequest();xhr.open("post", "upload.php", true);xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");var fd = new FormData();fd.append('mypic', fileList[0]);xhr.send(fd);},false);});

我们用FormData模拟表单数据, 直接将数据append到formdata对象中, 实现了ajax上传。

PHP

upload.php用于接收上传的文件信息, 完成上传, 实现代码如下:

<?php$mypic = $_FILES["mypic"];if(!empty($mypic)){$picname = $_FILES['mypic']['name'];$picsize = $_FILES['mypic']['size'];if ($picsize > 512000) {echo '图片大小不能超过500k';exit;}$type = strstr($picname, '.');if ($type != ".gif" && $type != ".jpg") {echo '图片格式不对!';exit;}$pics = 'helloweba' . $type;//上传路径$pic_path = "pics/". $pics;move_uploaded_file($mypic["tmp_name"],$pic_path);}?>

下边这几句可以没有

<meta charset="utf-8"><form action="" method="post" enctype="multipart/form-data"><input type="file" name="mypic"><input type="submit" value="上传"></form>

最后总结下HTML5实现拖拽上传的技术要点:

1、监听拖拽:监听页面元素的拖拽事件, 包括:dragenter、dragover、dragleave和drop, 一定要将dragover的默认事件取消掉, 不然无法触发drop事件。如需拖拽页面里的元素, 需要给其添加属性draggable=”true”;

2、获取拖拽文件:在drop事件触发后通过e.dataTransfer.files获取拖拽文件列表, .length属性获取文件数量, .type属性获取文件类型。

3、读取图片数据并添加预览图。

4、发送图片数据:使用FormData模拟表单数据AJAX提交文件流。

标签: #ajax提交文件到服务器怎么办