拖拽上传获取上传文件信息,e.dataTransfer.files始终为空的解决方案

本文介绍了一种解决拖拽文件上传时e.dataTransfer.files为空的问题,并提供了一种使用forEach函数成功获取文件的方法,同时还分享了一个文件上传的功能实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中需要做一个拖拽文件上传功能,遇到获取文件e.dataTransfer.files始终为空的情况,多次尝试,终于找到如下解决方案(附文件上传功能)

var enter=fucntion(e){
  ...
},
leave=fucntion(e){
  ...
},
drop = function(e) {
  //方法一,这种方法为网络常见方法,经多次实验不成功,files总是为空
  var files = e.dataTransfer.files;

  //方法二,这种方法另辟蹊径,巧妙的运用了forEach函数,经实验可成功获取文件
  var files = [];
  [].forEach.call(e.dataTransfer.files, function(file) {
    files.push(file);
  },false);
  console.log(files);
}

hotarea.addEventListener('dragenter', enter);
hotarea.addEventListener('dragover', enter);
droparea.addEventListener('dragleave',leave);
droparea.addEventListener("drop",drop);

附:文件上传功能

var chooseFile = function() { //打开文件选择窗口
  $('<input type="file" name="file" class="file" multiple="">').change(function() {
    upload(this.files);
  }).trigger("click");
}
,upload = function(files) {//开始上传
  //files即上传按钮和前文获取的文件
  var formData = new FormData();
  var uploadFiles = new Array();
  var param={a:a,b:b};//上传文件时同时向后台传递的参数
  if (!files.length) return;
  //formData.append('file', files[i]);//上传单个文件的添加方式
  for (var i in files) formData.append('file[]', files[i]); //上传多个文件的添加方式
  formData = $.extend(formData, param);
  $.ajax({
    type: "POST",
    url: url,
    data: formData,
    processData: false,//告诉jQuery不要去处理发送的数据
    contentType: false,//告诉jQuery不要去设置Content-Type请求头
    success: function(res) {
      ...
    }
  });
};

 

转载于:https://my.oschina.net/u/3552749/blog/1817898

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值