当前位置:首页 > 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 捕获并下载:

vue实现视频下载功能

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功能

原生JavaScript实现Vue核心功能 使用原生JavaScript模拟Vue的核心功能需要理解响应式数据绑定、虚拟DOM和组件系统等概念。以下是关键实现方法: 响应式数据系统 通过Object…

vue 实现收藏功能

vue 实现收藏功能

实现收藏功能的基本思路 在Vue中实现收藏功能通常涉及前端交互与后端数据存储的结合。核心逻辑包括:用户点击收藏按钮时切换状态,并通过API将状态同步到后端数据库。 前端组件实现 创建收藏按钮组件,使…

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个流行的前端框架,用于构建用户界面和单页应用。以下是 Vue 功能实现的关键方法和技术。 数据绑定与响应式 Vue 的核心特性是数据绑定和响应式系统。通过 d…

php实现linux关机重启功能

php实现linux关机重启功能

通过PHP执行Linux关机或重启命令 PHP可以通过exec()、shell_exec()或system()等函数调用系统命令实现关机或重启功能,但需注意权限问题。 使用exec函数执行命令 //…

vue电影功能实现

vue电影功能实现

Vue 电影功能实现 数据获取与展示 使用 Axios 或 Fetch API 从电影 API(如 TMDb、豆瓣 API)获取数据。在 Vue 的 created 或 mounted 生命周期钩子中…

vue实现收货功能

vue实现收货功能

实现收货功能的基本思路 在Vue中实现收货功能通常涉及前端界面交互、后端API调用以及状态管理。以下是关键步骤和代码示例: 页面布局与数据绑定 使用Vue的模板语法构建收货表单,包含收货人、联系方式…