当前位置:首页 > VUE

vue实现视频下载功能

2026-01-20 16:56:38VUE

使用 Blob 对象和 URL.createObjectURL 下载

在 Vue 中实现视频下载功能,可以通过将视频文件转换为 Blob 对象,并使用 URL.createObjectURL 创建下载链接。这种方法适用于从后端获取视频文件流或直接下载网络资源。

// 在 methods 中定义下载方法
downloadVideo() {
  fetch('视频URL')
    .then(response => response.blob())
    .then(blob => {
      const url = window.URL.createObjectURL(blob)
      const a = document.createElement('a')
      a.href = url
      a.download = '视频文件名.mp4'
      document.body.appendChild(a)
      a.click()
      window.URL.revokeObjectURL(url)
      document.body.removeChild(a)
    })
    .catch(error => console.error('下载失败:', error))
}

使用 axios 下载并显示进度

如果需要显示下载进度,可以使用 axios 库。这种方式更适合需要用户交互和反馈的场景。

import axios from 'axios'

// 在 methods 中定义带进度条的下载方法
downloadVideoWithProgress() {
  axios({
    url: '视频URL',
    method: 'GET',
    responseType: 'blob',
    onDownloadProgress: progressEvent => {
      const percentCompleted = Math.round(
        (progressEvent.loaded * 100) / progressEvent.total
      )
      console.log(percentCompleted + '%')
      // 可以在这里更新UI进度条
    }
  }).then(response => {
    const url = window.URL.createObjectURL(new Blob([response.data]))
    const link = document.createElement('a')
    link.href = url
    link.setAttribute('download', '视频文件.mp4')
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
  })
}

处理跨域问题

如果视频资源存在跨域限制,需要在服务器端设置 CORS 头或使用代理。对于前端解决方案,可以尝试以下方法:

// 使用 crossorigin 属性
const video = document.createElement('video')
video.crossOrigin = 'anonymous'
video.src = '视频URL'
video.addEventListener('loadedmetadata', () => {
  // 下载逻辑
})

分片下载大文件

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

async function downloadLargeVideo() {
  const chunkSize = 1024 * 1024 // 1MB chunks
  let startByte = 0
  let endByte = chunkSize
  const videoSize = await getVideoSize() // 需要实现获取视频大小的方法
  const chunks = []

  while (startByte < videoSize) {
    const chunk = await fetchChunk(startByte, endByte)
    chunks.push(chunk)
    startByte = endByte
    endByte = Math.min(endByte + chunkSize, videoSize)
  }

  const fullBlob = new Blob(chunks)
  const url = URL.createObjectURL(fullBlob)
  // 创建下载链接...
}

前端直接下载本地视频

如果视频已经在页面中播放,可以通过 canvas 捕获并下载:

downloadLocalVideo() {
  const video = document.getElementById('videoElement')
  const canvas = document.createElement('canvas')
  canvas.width = video.videoWidth
  canvas.height = video.videoHeight
  canvas.getContext('2d').drawImage(video, 0, 0)

  canvas.toBlob(blob => {
    const url = URL.createObjectURL(blob)
    const a = document.createElement('a')
    a.href = url
    a.download = 'captured-video.mp4'
    a.click()
  }, 'video/mp4')
}

vue实现视频下载功能

分享给朋友:

相关文章

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个渐进式 JavaScript 框架,广泛用于构建用户界面。以下是 Vue 功能的常见实现方法。 数据绑定 Vue 的核心功能之一是数据绑定,通过 v-mod…

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备 准备需要筛选的数据源,通常是一个数组,可以存储在Vue组件的…

vue修改功能实现

vue修改功能实现

Vue 修改功能的实现方法 在 Vue 中实现修改功能通常涉及表单绑定、数据更新和事件处理。以下是几种常见的实现方式: 数据双向绑定 使用 v-model 指令实现表单元素与 Vue 实例数据的双向…

vue实现桌面功能

vue实现桌面功能

Vue 实现桌面功能的方法 Vue.js 可以通过结合 Electron 或 NW.js 等框架实现桌面应用开发。以下是几种常见的方法: 使用 Vue 与 Electron 结合 Electron…

vue实现审核功能

vue实现审核功能

实现审核功能的基本思路 审核功能通常涉及状态管理、权限控制和操作记录。Vue中可以通过组件化设计、状态管理库(如Vuex或Pinia)和后端API配合实现。 审核状态管理 使用Vuex或Pinia…

vue的艾特功能实现

vue的艾特功能实现

Vue 中的 @ 功能实现 Vue 中的 @ 符号是 v-on 指令的简写,用于绑定事件监听器。以下是具体实现方式: 基本语法 <button @click="handleClick">…