拖拽的方式上传文件

原理

通常情况下,在没有任何设置的情况下,你将一个文件拖拽到一个网页上,松开鼠标后,浏览器会默认你的行为是想用浏览器打开你拖拽进去的文件,于是浏览器自动另起一个窗口打开你拖拽的文件,而我们需要的是读取文件信息,那么我们要做的第一件事情就是拦截捕获这个文件,让这个文件由我们自己来处理而不是由浏览器处理。这就需要两个事件,一个是dragover,另一个是drop。
dragover事件:绑定dragover事件的元素,在鼠标拖拽文件经过改元素时会触发这个事件
drop事件:绑定drop事件的元素,在鼠标拖拽文件在这个元素松开时候会触发这个事件。返回的event中有个dataTransfer对象,改对象里有个files属性,存放的就是用户拖拽的文件数组。
两个事件配合可以达到捕获文件拖拽事件的能力。

源码

可以复制源码运行体验一下

 <div id="drop">
   请把图片拖至于此
 </div>
 <div class="imgs"></div>
  #drop{
   width: 300px;
   height: 300px;
   border: 1px solid gray;
   line-height:300px;
   text-align: center;
   
 }
 .imgs{
   display: flex;
   justify-content: center;
   align-items: center;
   flex-wrap: wrap;
 }
 .imgs img{
   width: 25%;
 }
  let dropBox=document.querySelector('#drop');
 let imgsElem=document.querySelector('.imgs');
 dropBox.addEventListener('dragover',function(e){
   e.stopPropagation();
   e.preventDefault();
 })
 dropBox.addEventListener('drop',function(e){
   e.stopPropagation();
   e.preventDefault();
   let dataTransfer=e.dataTransfer;
   let files=dataTransfer.files;
   handleFiles(files)
 })
 function handleFiles(files){
   for(let file of files){
     if(/^image\//.test(file.type)){
       let img=document.createElement('img');
       imgsElem.appendChild(img);
       img.file=file;
       let reader=new FileReader();
       reader.onload=function(){
         img.src=reader.result;
       }
       reader.readAsDataURL(file)
     }
   }
 }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Selenium 是一个广泛使用的自动化测试工具,它主要用于浏览器自动化。当涉及到网页应用程序交互时,如果需要模拟用户拖拽文件上传的操作,Selenium 可以通过 JavaScript 的 `dragAndDrop` 功能来实现。以下是使用 Selenium 进行文件拖拽上传的一般步骤: 1. **定位元素**:首先,你需要找到可拖拽的目标区域(通常是文件输入框或指定的区域)和待上传的文件元素。这通常通过 `WebElement` 对象完成,比如 `driver.findElement(By.id("fileInput"))`。 2. **鼠标模拟**:在 Python 中,你可以使用 `ActionChains` 类来创建和执行一系列鼠标动作。例如: ```python from selenium.webdriver.common.action_chains import ActionChains action = ActionChains(driver) ``` 3. **准备拖动**:设置源文件的路径和目标区域的位置,然后开始拖动操作: ```python source_file = driver.find_element_by_xpath("//input[@type='file']") target_area = driver.find_element_by_id("dropZone") action.click_and_hold(source_file).move_to_element(target_area).release().perform() ``` 4. **触发上传**:如果拖放后没有自动上传,可能还需要触发点击上传按钮或者检查是否有额外的事件需要触发,例如 `target_area.send_keys(Keys.RETURN)`。 5. **等待上传完成**:如果需要,你可以设置一个等待条件来确认文件是否已经成功上传,比如检查服务器返回的状态码或者页面上的反馈消息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值