当前位置:首页 > VUE

vue实现下载暂停

2026-01-12 05:12:31VUE

Vue 实现下载暂停功能

在 Vue 中实现下载暂停功能需要结合前端技术如 fetchXMLHttpRequest 进行控制,以下是具体实现方法:

使用 AbortController 中断请求

通过 AbortController 可以中断正在进行的下载请求,实现暂停效果。

// 在 Vue 组件中
data() {
  return {
    controller: null,
    isDownloading: false,
    downloadProgress: 0
  };
},
methods: {
  startDownload() {
    this.controller = new AbortController();
    this.isDownloading = true;
    fetch('your-download-url', {
      signal: this.controller.signal
    })
    .then(response => {
      const reader = response.body.getReader();
      const contentLength = +response.headers.get('Content-Length');
      let receivedLength = 0;

      const processChunk = ({ done, value }) => {
        if (done) {
          this.isDownloading = false;
          return;
        }
        receivedLength += value.length;
        this.downloadProgress = (receivedLength / contentLength) * 100;
        return reader.read().then(processChunk);
      };
      return reader.read().then(processChunk);
    })
    .catch(err => {
      if (err.name === 'AbortError') {
        console.log('Download aborted');
      }
    });
  },
  pauseDownload() {
    if (this.controller) {
      this.controller.abort();
      this.isDownloading = false;
    }
  }
}

使用 XMLHttpRequest 实现暂停和恢复

XMLHttpRequest 可以获取下载进度并实现更细粒度的控制。

data() {
  return {
    xhr: null,
    downloadedBytes: 0,
    totalBytes: 0,
    isPaused: false
  };
},
methods: {
  startDownload() {
    this.xhr = new XMLHttpRequest();
    this.xhr.open('GET', 'your-download-url', true);
    this.xhr.responseType = 'blob';

    this.xhr.onprogress = (event) => {
      if (event.lengthComputable) {
        this.downloadedBytes = event.loaded;
        this.totalBytes = event.total;
      }
    };

    this.xhr.onload = () => {
      if (this.xhr.status === 200) {
        const blob = this.xhr.response;
        // 处理下载完成的 blob
      }
    };

    this.xhr.send();
  },
  pauseDownload() {
    if (this.xhr) {
      this.xhr.abort();
      this.isPaused = true;
    }
  }
}

实现断点续传

对于大文件下载,可以结合服务器支持实现断点续传。

resumeDownload() {
  this.xhr = new XMLHttpRequest();
  this.xhr.open('GET', 'your-download-url', true);
  this.xhr.setRequestHeader('Range', `bytes=${this.downloadedBytes}-`);
  this.xhr.responseType = 'blob';

  this.xhr.onprogress = (event) => {
    // 更新进度
  };

  this.xhr.send();
}

注意事项

  • 服务器需要支持 Range 请求头才能实现断点续传。
  • 下载进度显示需要确保响应头包含 Content-Length
  • 中断下载后可能需要清理已下载的临时数据。

通过以上方法可以在 Vue 应用中实现下载暂停功能,根据具体需求选择适合的方案。

vue实现下载暂停

标签: vue
分享给朋友:

相关文章

vue实现共享屏幕

vue实现共享屏幕

共享屏幕的基本实现 在Vue中实现共享屏幕功能通常需要结合浏览器的getDisplayMedia API。以下是一个基础实现示例: <template> <div>…

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &…

前端多线程实现vue

前端多线程实现vue

前端多线程与Vue的结合 在Vue中实现多线程通常通过Web Worker技术完成。Web Worker允许在后台线程中运行脚本,避免阻塞主线程,适合处理计算密集型任务。 使用Web Worker的…

用vue实现搜索查询

用vue实现搜索查询

实现搜索查询的基本思路 在Vue中实现搜索查询功能通常涉及以下几个核心部分:数据绑定、事件监听、过滤逻辑和UI反馈。以下是一个完整的实现方案。 数据绑定与输入框 创建一个Vue组件,包含一个输入框用…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue状态管理怎么实现

vue状态管理怎么实现

Vue 状态管理实现方法 使用 Vuex(官方推荐) Vuex 是 Vue 的官方状态管理库,适合中大型应用。 安装 Vuex: npm install vuex --save 创建 Store…