如何实现拖拽上传、上传进度条,以及取消上传?

文件上传是最常见的一种业务需求,上传功能可简单,可复杂,简单就是把文件传上去就行,复杂就是涉及大文件断点续传、控制并发等,不知道大家对上传都了解多少。今天要给大家分享的是上传需求中最为常见的一些场景,话不多说,开干:

拖拽上传

拖拽上传涉及到样式交互、文件信息获取,那么,我们首先了解一下拖拽相关的几个事件:

  1. dragover - 被拖动的对象进入目标容器时触发
  2. dragleave - 被拖动的对象离开目标容器时触发
  3. drop - 被拖动的对象进入目标容器,释放鼠标键时触发

了解了这几个事件,再实现拖拽上传就相当容易了。先上效果图:

效果展示

当被拖动的对象进入目标容器时,容器边框变红。当拖出目标容器,或者释放鼠标键时,容器边框置灰。当释放鼠标键时,获取拖动对象的文件信息。

代码实现
<template>
  <div ref="drag" class="drag">
    <div class="drag-icon-box">
      <!-- 采用的是 element-ui 的图标 -->
      <i class="el-icon-upload"></i> 
    </div>
    <div class="drag-message">
      <span class="drag-message-title">将文件拖动到此处,或</span>
      <label for="file" class="drag-message-label">
        <input
          class="drag-message-input"
          type="file"
          id="file"
          name="file"
          @change="handleFileChange"
        />
        <span class="drag-message-manual">点击上传</span>
      </label>
    </div
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以结合HTML5的拖放功能和XHR对象来实现进度条的文件上传。以下是一个示例代码: ```html <!DOCTYPE html> <html> <head> <style> #dropzone { width: 200px; height: 200px; border: 2px dashed #ccc; text-align: center; padding: 10px; font-size: 18px; } #progress { width: 0%; height: 10px; background-color: #4CAF50; } </style> </head> <body> <div id="dropzone">将文件拖放到此处</div> <div id="progress"></div> <script> var dropzone = document.getElementById('dropzone'); var progress = document.getElementById('progress'); dropzone.addEventListener('dragover', function(e) { e.preventDefault(); dropzone.style.backgroundColor = '#f7f7f7'; }); dropzone.addEventListener('dragleave', function(e) { e.preventDefault(); dropzone.style.backgroundColor = ''; }); dropzone.addEventListener('drop', function(e) { e.preventDefault(); dropzone.style.backgroundColor = ''; var files = e.dataTransfer.files; for (var i = 0; i < files.length; i++) { var file = files[i]; console.log('文件名:', file.name); console.log('文件大小:', file.size); console.log('文件类型:', file.type); // 创建FormData对象,用于发送文件数据 var formData = new FormData(); formData.append('file', file); // 创建XHR对象 var xhr = new XMLHttpRequest(); // 监听上传进度 xhr.upload.addEventListener('progress', function(e) { var percent = (e.loaded / e.total) * 100; progress.style.width = percent + '%'; }); // 监听上传完成事件 xhr.addEventListener('load', function() { console.log('上传完成'); }); // 发送POST请求 xhr.open('POST', 'upload.php'); xhr.send(formData); } }); </script> </body> </html> ``` 在这个示例中,我添加了一个进度条元素`<div id="progress"></div>`,用于显示文件上传的进度。在上传过程中,通过监听XHR对象的`progress`事件,计算上传百分比并更新进度条的宽度。 你需要将代码中的`upload.php`替换为你实际处理文件上传的后端脚本。在该脚本中,你可以使用服务器端语言(如PHP、Node.js等)来处理上传文件的逻辑。 请注意,由于涉及到跨域请求,在实际应用中可能需要进行一些额外的配置和处理。此外,这只是一个基本的示例,你可以根据需要进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值