由于项目需要上传文件到服务器,于是便在文件上传的基础上增加了拖拽上传。拖拽上传当然属于文件上传的一部分,只不过在文件上传的基础上增加了拖拽的界面,主要在于前台的交互,

从拖拽的文件中获取文件列表然后调用上传方法即可。拖拽上传能给用户多一种选择,提高用户体验,下面是最简单的一个推拽上传示例

HTML部分:

<!--拖拽上传区域-->

<div class="dropBox_wrap">

    <div id="dropbox" class="drop">

         <h4>请将文件拖拽到此区域进行上传</h4>

    </div>

</div>

Js部分:

//监听拖拽放置区域拖拽事件

(function(){

var oDrop = document.getElementById("dropbox"),oBody = document.querySelector("body");

EventUtil.addHandler(oDrop,"dragenter",function(evt){

EventUtil.preventDefault(evt);

});

EventUtil.addHandler(oDrop,"dragover",function(evt){

$(oDrop).addClass("drop_enter").removeClass("drop_leave");

EventUtil.preventDefault(evt);

});

EventUtil.addHandler(oBody,"drop",function(evt){

$(oDrop).removeClass("drop_leave drop_enter");

EventUtil.preventDefault(evt);

return false;

});

EventUtil.addHandler(oDrop,"dragleave",function(evt){

$(oDrop).addClass("drop_leave").removeClass("drop_enter");

leaveHandler(evt);

});

EventUtil.addHandler(oDrop,"drop",function(evt){

dropHandler(evt);

});

})();

function dropHandler(e){

e.preventDefault(); //阻止默认

var fileList = e.dataTransfer.files; //获取拖拽的文件列表

if(fileList.length>0&&fileList[0].type != ""){//如果为多个文件,遍历

var formData = new FormData();

for(var i=0;i<fileList.length;i++){

formData.append('files', fileList[i]);//存入formData对象

}

ajaxFileUpload(formData); //调用文件上传方法,可以参考博客内另一篇文章:文件上传,下方会放链接

}else{

alert("请上传单个或多个文件");

}

}

//定义拖拽离开事件

function leaveHandler(e){

}

});

//定义事件处理程序方法

//element:dom对象,type:事件类型,handler:事件处理方法

var EventUtil = {

//添加事件监听方法

addHandler: function(element, type, handler){

if (element.addEventListener){

element.addEventListener(type, handler, false);

} else if (element.attachEvent){

element.attachEvent("on" + type, handler);

} else {

element["on" + type] = handler;

}

},

//移除事件监听方法

removeHandler: function(element, type, handler){

if (element.removeEventListener){

element.removeEventListener(type, handler, false);

} else if (element.detachEvent){

element.detachEvent("on" + type, handler);

} else {

element["on" + type] = null;

}

},

//获取事件对象

getEvent: function(event){

return event ? event : window.event;

},

getTarget: function(event){

return event.target || event.srcElement;

},

//阻止默认行为

preventDefault: function(event){

if (event.preventDefault){

event.preventDefault();

} else {

event.returnValue = false;

}

},

//阻止事件冒泡

stopPropagation: function(event){

if (event.stopPropagation){

event.stopPropagation();

} else {

event.cancelBubble = true;

}

}

}

文件上传方法可以参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/09/js%E6%8B%96%E6%8B%BD%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%8A%E4%BC%A0/

js拖拽文件夹上传的更多相关文章

  1. js文件夹上传

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  2. js文件夹上传下载组件

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  3. vue文件夹上传组件选哪个好?

    一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...

  4. Java Web 项目的文件/文件夹上传下载

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...

  5. vue文件夹上传源码

    一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传:支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输. ...

  6. Linux 本地文件或文件夹上传服务器

    Linux 本地文件或文件夹上传服务器 一.权限设置 本地文件或文件夹上传服务器,你首先需要获取到root权限: 二.上传方式 上传方式有两种 : 1.通过 FTP 客户端上传文件或文件夹: 2.通过 ...

  7. Web大文件(夹)上传(断点续传)控件发布-Xproer.HttpUploader6

    版权所有 2009-2017荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  8. Web大文件(夹)上传(断点续传)控件-Xproer.HttpUploader6

    版权所有 2009-2017荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...

  9. webkitdirectory 实现文件夹上传

    文件夹上传这个功能在web端可能有需求,这里就简单介绍下用法. 目前只有谷歌浏览器还有Microsoft Edge支持按照文件夹进行上传,具体可以看下百度云盘的网页版的上传按钮,在火狐下就支持按照文件 ...

随机推荐

  1. LeetCode 203——移除链表(JAVA)

    删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4 ...

  2. T100——读取系统程序临时表数据

    SELECT   * FROM   USER_OBJECTS ORDER  BY  CREATED DESC SELECT   * FROM   USER_OBJECTS WHERE  OBJECT_ ...

  3. 牛客 109B 好位置 (字符串水题)

    大意: 给定字符串$s1,s2$, 对于$s1$中所有与$s2$相等的子序列$t$, $t$在$s1$中的下标定义为好位置. 求$s1$是否所有位置都是好位置. 显然$s1$的前缀要与$s2$相等, ...

  4. 22-Perl Socket 编程

    1.Perl Socket 编程Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. ...

  5. 查询进程内存,cpu占用情况。僵尸进程

    查使用内存最多的5个进程:ps aux | head -1 && ps aux | grep -v USER | sort -nr -k 4 | head -5 查使用CPU最多的5个 ...

  6. Aveva Marine C# 二次开发入门001

    1# 引用 C:\AVEVA\Marine\OH12.1.SP4\Aveva.ApplicationFramework.dll C:\AVEVA\Marine\OH12.1.SP4\Aveva.App ...

  7. kali入侵服务器之后清除痕迹

    Linux清除痕迹 第一种方法: 在退出会话前直接执行: #history -r 清除当前会话的命令历史记录 第二种方法: 在vim中执行自己不想让别人看到的命令随便用vim打开一个文件 :set h ...

  8. textarea回填数据显示自适应高度

    queryTextArea(){ var textAll = document.getElementById('templaInner').querySelectorAll("textare ...

  9. IIS出现Server Error in '/' Application 错误的解决办法

    C:\Windows\Temp"文件夹加上 IIS_IUSRS的权限

  10. Python学习计划-首篇

    概述 Python语言这几年的热度一直持续上升,有多火也不用我再介绍了,光从近几年编程语言排行榜的上升热度就能看出,因此我也计划学习一下python语言,并且将每次的学习收获记录下来.一方面是记录下来 ...