当前位置:首页 > 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 库可以更简洁地实现文件下载功能。

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

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

处理大文件分片下载

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

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 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置…

vue实现语音

vue实现语音

Vue 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…

vue router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通…

vue实现route

vue实现route

Vue 路由实现方法 Vue 中实现路由通常使用 vue-router 库,这是 Vue 官方推荐的路由管理器。以下是具体实现步骤: 安装 vue-router 通过 npm 或 yarn 安装…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

vue实现曲线

vue实现曲线

Vue 实现曲线的方法 在 Vue 中实现曲线可以通过多种方式,包括使用 SVG、Canvas 或第三方库如 D3.js、ECharts 等。以下是几种常见的方法: 使用 SVG 绘制曲线 SVG…