当前位置:首页 > VUE

vue实现下载视频

2026-02-21 23:58:56VUE

使用 axios 和 Blob 对象下载视频

在 Vue 项目中通过 axios 获取视频流数据,利用 Blob 对象和 URL.createObjectURL 生成下载链接。

// 在 methods 中定义下载方法
downloadVideo() {
  axios({
    url: '视频URL地址',
    method: 'GET',
    responseType: 'blob'
  }).then(response => {
    const url = window.URL.createObjectURL(new Blob([response.data]))
    const link = document.createElement('a')
    link.href = url
    link.setAttribute('download', 'video.mp4')
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
  })
}

使用 FileSaver.js 库简化下载

安装 FileSaver.js 库可以更简洁地实现文件下载功能。

vue实现下载视频

npm install file-saver
import { saveAs } from 'file-saver'

downloadVideo() {
  axios.get('视频URL地址', {
    responseType: 'blob'
  }).then(response => {
    saveAs(new Blob([response.data]), 'video.mp4')
  })
}

处理大文件分片下载

对于大视频文件,可以实现分片下载以提高可靠性和用户体验。

vue实现下载视频

async downloadLargeVideo() {
  const chunkSize = 1024 * 1024 // 1MB分片
  let startByte = 0
  let endByte = chunkSize
  const videoSize = await this.getVideoSize()

  while(startByte < videoSize) {
    const chunk = await this.fetchVideoChunk(startByte, endByte)
    // 处理分片数据
    startByte = endByte
    endByte = Math.min(endByte + chunkSize, videoSize)
  }
}

getVideoSize() {
  return axios.head('视频URL地址').then(res => {
    return parseInt(res.headers['content-length'])
  })
}

fetchVideoChunk(start, end) {
  return axios.get('视频URL地址', {
    headers: { 'Range': `bytes=${start}-${end}` },
    responseType: 'blob'
  })
}

添加下载进度显示

通过 axios 的 onDownloadProgress 回调可以显示下载进度。

downloadWithProgress() {
  axios.get('视频URL地址', {
    responseType: 'blob',
    onDownloadProgress: progressEvent => {
      const percentCompleted = Math.round(
        (progressEvent.loaded * 100) / progressEvent.total
      )
      console.log(percentCompleted + '%')
    }
  }).then(response => {
    saveAs(new Blob([response.data]), 'video.mp4')
  })
}

处理跨域问题

如果视频资源存在跨域限制,需要在服务器端配置 CORS 或使用代理。

// vue.config.js 配置代理
module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'https://视频源域名',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  }
}

注意事项

视频下载功能需要考虑版权问题,确保有合法授权 大文件下载时建议添加分片和断点续传功能 移动端浏览器可能有不同的下载行为,需要测试兼容性 某些浏览器可能会阻止自动下载,需要用户交互触发

标签: 视频vue
分享给朋友:

相关文章

vue实现视频开场

vue实现视频开场

使用 Vue 实现视频开场动画 在 Vue 中实现视频开场动画可以通过结合 HTML5 的 <video> 标签和 Vue 的过渡效果或生命周期钩子来完成。以下是具体实现方法: 安装依赖…

vue实现文字播放栏

vue实现文字播放栏

Vue 实现文字播放栏(跑马灯效果) 方法一:使用 CSS 动画 + Vue 数据绑定 通过 CSS 的 @keyframes 实现动画效果,结合 Vue 的动态数据绑定控制内容。 <tem…

vue实现一个tab栏

vue实现一个tab栏

Vue 实现 Tab 栏 基础实现(选项式 API) <template> <div class="tab-container"> <div class="t…

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动渲…

vue element实现

vue element实现

Vue Element UI 实现 Vue Element UI 是基于 Vue.js 的组件库,提供丰富的 UI 组件,适合快速开发企业级中后台产品。以下是一些关键实现方法和步骤: 安装 Vue…

vue实现过滤

vue实现过滤

Vue实现过滤的方法 在Vue中实现数据过滤可以通过多种方式完成,以下是几种常见的方法: 使用计算属性过滤 计算属性是Vue中处理数据过滤的理想选择,它们基于响应式依赖进行缓存,只有在相关依赖发生改…