当前位置:首页 > VUE

vue 实现文件下载

2026-01-18 08:32:06VUE

使用 window.open 方法

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

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

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

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

vue 实现文件下载

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

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

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

vue 实现文件下载

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')

处理大文件分片下载

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

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 实现订单功能 数据模型设计 订单功能通常需要设计以下数据结构: // 订单数据结构 const order = { id: '', // 订单ID userId…

vue实现飘窗原理

vue实现飘窗原理

vue实现飘窗原理 飘窗效果通常指在页面上悬浮显示的弹窗或通知,跟随页面滚动或固定在某个位置。Vue实现这一效果主要依赖组件化开发、CSS定位和动态数据绑定。 组件结构设计 创建一个独立的Vue组件…

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vu…

vue 实现pc

vue 实现pc

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

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…