当前位置:首页 > 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实现下载视频

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

注意事项

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

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

相关文章

vue 实现在线预览

vue 实现在线预览

Vue 实现在线预览的常见方法 使用 iframe 嵌入 通过 iframe 标签可以嵌入多种类型的文件,如 PDF、图片、网页等。需要确保文件地址可访问。 <template> &…

vue实现全景

vue实现全景

Vue 实现全景效果的方法 使用 Vue 实现全景效果通常需要结合第三方库或框架,以下是几种常见的方法: 使用 Three.js 和 Vue-Three.js Three.js 是一个强大的 3D…

vue实现handsontable

vue实现handsontable

Vue 中实现 Handsontable 要在 Vue 项目中集成 Handsontable,可以使用官方提供的 @handsontable/vue 封装库。以下是一个完整的实现步骤。 安装依赖 确…

vue 实现过滤

vue 实现过滤

Vue 实现过滤的方法 在 Vue 中实现过滤功能可以通过多种方式完成,包括使用计算属性、自定义过滤器、第三方库等。以下是几种常见的实现方法: 使用计算属性进行过滤 计算属性是 Vue 中最常用的过…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…

vue监听实现

vue监听实现

Vue 监听实现方法 在 Vue 中可以通过多种方式实现监听数据变化或事件触发,以下是常见的几种方法: 使用 watch 选项 watch 是 Vue 提供的核心功能之一,用于观察和响应 Vue 实…