php拖拽上传大文件,如何实现文件拖拽上传

拖拽选择文件

屏蔽默认事件

刚开始的时候,是在网上找了一个例子,这个例子中提到,需要在document上屏蔽和drag相关的所有事件的默认处理方式,代码如下:$(document).on({

dragleave:function(e){ //拖离

e.preventDefault();

},

drop:function(e){ //拖后放

e.preventDefault();

},

dragenter:function(e){ //拖进

e.preventDefault();

},

dragover:function(e){ //拖来拖去

e.preventDefault();

}

});

实际上,在我们的文件上传中,接受拖拽的区域一般只有一个小区域,所以我对其做了如下的精简

$drop.on("dragenter", function (e) {

e.preventDefault();

console.log("enter");

$drop.addClass("hover");});$drop.on("dragleave drop", function (e) {

e.preventDefault();

console.log("leave");

$drop.removeClass("hover");});$drop.on("dragover", function (e) {

e.preventDefault();})

并且,在enter事件的时候,给目标区域增加了一个hover的样式,让接受区域高亮

df66c66fdf4021db7e901303e17bc31a.png

默认情况下是酱紫的,(所以在drop 和leave事件中要去掉这个样式)

2183182857472e8d6a1b75ec3258213d.png

对来源不同的文件进行处理

因为要同时处理input框和拖拽区域,所以我的html结构如下:

:class="{'disabled' : resultMsg.length > 0}" class="btn btn-info">

选择文件

{{msg}}

type="file"

v-show="resultMsg.length == 0"

@change="Change($event)"

name="importExcel"

class="importExcel"

value="" />

为#dropBox 的drop事件和input的change事件同时绑定Change函数并将event对象传入函数中

这里,我在drop事件上加入了prevent修饰符来屏蔽默认事件,如果不屏蔽事件,接受区域#dropBox 是无法接收到文件,并且文件会触发浏览器的下载(如果不能直接预览的话)或者预览;

Change:function(ev){

var e = window.event || ev;

var file = e.target.files ? e.target.files[0] : e.dataTransfer.files[0];

if(!file){

vm.msg = "点击选择,或者拖拽填写好数据的excel文件致此";

vm.isError = true;

return false

}

},

ps:隐去了js代码中的业务逻辑只讲述公共部分,

在接受用户选择的文件时,用e.target.files作为判断条件,来判断是否有input选择的文件,如果是则取 e.target.files[0] ,如果不是 则取 e.dataTransfer.files[0]。

这两个事件对象的属性是浏览器根据不同的情况挂在事件对象上的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值