当前位置:首页 > VUE

vue 实现文件下载

2026-01-18 08:32:06VUE

使用 window.open 方法

通过 window.open 直接打开文件链接触发下载,适用于已知文件 URL 的情况:

window.open('文件URL', '_blank')

使用 <a> 标签动态创建下载链接

动态生成 <a> 标签并模拟点击,适用于需要从后端获取下载链接的场景:

const link = document.createElement('a')
link.href = '文件URL'
link.download = '文件名.扩展名' // 设置下载文件名
document.body.appendChild(link)
link.click()
document.body.removeChild(link)

通过 Blob 对象下载二进制数据

当需要下载后端返回的二进制流数据时(如 Axios 请求):

axios.get('接口URL', { responseType: 'blob' }).then(response => {
  const url = window.URL.createObjectURL(new Blob([response.data]))
  const link = document.createElement('a')
  link.href = url
  link.download = '文件名.扩展名'
  document.body.appendChild(link)
  link.click()
  window.URL.revokeObjectURL(url)
  document.body.removeChild(link)
})

使用 FileSaver.js 库

对于需要更复杂下载需求的场景,可以使用第三方库 FileSaver.js:

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

// 保存文本
saveAs(new Blob(['文件内容'], { type: 'text/plain' }), 'filename.txt')

// 保存Blob对象
saveAs(blobObject, 'filename.ext')

处理大文件分片下载

对于大文件下载,可以结合后端实现分片下载:

vue 实现文件下载

async function downloadLargeFile(url, fileName) {
  const response = await fetch(url)
  const reader = response.body.getReader()
  const contentLength = +response.headers.get('Content-Length')
  let receivedLength = 0
  const chunks = []

  while(true) {
    const { done, value } = await reader.read()
    if (done) break
    chunks.push(value)
    receivedLength += value.length
    console.log(`下载进度: ${(receivedLength / contentLength * 100).toFixed(2)}%`)
  }

  const blob = new Blob(chunks)
  const downloadUrl = URL.createObjectURL(blob)
  const a = document.createElement('a')
  a.href = downloadUrl
  a.download = fileName
  a.click()
  URL.revokeObjectURL(downloadUrl)
}

注意事项

  • 跨域问题需确保服务器配置正确的 CORS 头
  • 动态生成的下载链接需要及时清理内存
  • 对于敏感文件建议增加权限验证
  • 移动端浏览器可能有不同的下载行为

标签: 文件vue
分享给朋友:

相关文章

vue 实现权限

vue 实现权限

Vue 实现权限控制的方法 在 Vue 项目中实现权限控制通常涉及前端路由、组件和按钮级别的权限管理。以下是几种常见的实现方式: 路由权限控制 通过路由守卫实现权限验证,过滤用户无权访问的路由:…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

实现 vue 框架

实现 vue 框架

Vue 框架的基本实现 Vue 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现 Vue 框架的基本步骤和核心概念。 核心概念 响应式数据绑定 Vue 的核心特性之一是响应式数…

vue实现定位

vue实现定位

Vue 中实现定位的方法 在 Vue 中实现定位可以通过以下几种方式: 使用 CSS 定位 通过 CSS 的 position 属性实现定位,Vue 中可以直接在组件的 <style>…

vue能实现

vue能实现

Vue.js 是一个流行的前端框架,能够实现多种功能。以下是 Vue 能够实现的主要功能和特性: 响应式数据绑定 Vue 的核心特性之一是响应式数据绑定。通过数据驱动视图,当数据发生变化时,视图会自…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…