当前位置:首页 > VUE

vue实现文件下载demo

2026-02-24 21:06:12VUE

Vue 实现文件下载的几种方法

通过 <a> 标签下载

在 Vue 模板中使用 <a> 标签的 download 属性实现文件下载。适用于已知文件 URL 且无需鉴权的场景。

<template>
  <a :href="fileUrl" download="filename.pdf">点击下载文件</a>
</template>

<script>
export default {
  data() {
    return {
      fileUrl: 'https://example.com/files/sample.pdf'
    }
  }
}
</script>

使用 Blob 对象和 URL.createObjectURL

适用于需要从后端获取二进制流或需要处理动态生成文件的场景。

methods: {
  downloadFile() {
    axios.get('/api/download', { responseType: 'blob' })
      .then(response => {
        const url = window.URL.createObjectURL(new Blob([response.data]))
        const link = document.createElement('a')
        link.href = url
        link.setAttribute('download', 'file.pdf')
        document.body.appendChild(link)
        link.click()
        document.body.removeChild(link)
        window.URL.revokeObjectURL(url)
      })
  }
}

处理大文件下载(带进度条)

结合 axios 的 onDownloadProgress 实现下载进度显示。

methods: {
  downloadWithProgress() {
    axios({
      url: '/api/large-file',
      method: 'GET',
      responseType: 'blob',
      onDownloadProgress: progressEvent => {
        const percent = Math.round(
          (progressEvent.loaded * 100) / progressEvent.total
        )
        console.log(`下载进度: ${percent}%`)
      }
    }).then(response => {
      // 处理文件下载逻辑
    })
  }
}

后端返回文件流时的处理

当后端返回文件流时,需要正确设置响应头和处理响应数据。

axios.get('/api/export-excel', {
  responseType: 'arraybuffer'
}).then(res => {
  const blob = new Blob([res.data], { type: 'application/vnd.ms-excel' })
  const url = URL.createObjectURL(blob)
  const a = document.createElement('a')
  a.href = url
  a.download = 'report.xlsx'
  a.click()
})

处理需要鉴权的文件下载

对于需要携带 token 的下载请求,需要在请求头中添加认证信息。

axios.get('/api/protected-file', {
  headers: {
    'Authorization': `Bearer ${localStorage.getItem('token')}`
  },
  responseType: 'blob'
}).then(res => {
  // 处理下载逻辑
})

注意事项

  • 跨域问题需要后端配合设置 CORS 响应头
  • 大文件下载建议分块处理或使用断点续传
  • 移动端可能需要特殊处理某些浏览器的兼容性问题
  • 下载完成后及时释放创建的 Object URL 避免内存泄漏

vue实现文件下载demo

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

相关文章

vue如何实现注册

vue如何实现注册

实现用户注册功能 在Vue中实现注册功能通常需要结合前端表单和后端API交互。以下是完整的实现方案: 创建注册表单组件 注册表单需要包含用户名、邮箱、密码等基本字段,并进行表单验证: <te…

vue实现登出

vue实现登出

实现Vue登出功能 登出功能通常涉及清除用户会话、令牌或本地存储的数据,并重定向到登录页面。以下是几种常见的实现方式: 清除用户令牌和状态 在Vuex的store中定义一个logout mutat…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue实现flvvideo

vue实现flvvideo

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

vue实现webapp

vue实现webapp

Vue 实现 WebApp 的基本步骤 环境准备 确保已安装 Node.js 和 npm/yarn。通过 Vue CLI 或 Vite 创建项目: npm install -g @vue/cli v…

vue环境实现

vue环境实现

Vue 环境搭建 安装 Node.js 和 npm Node.js 是运行 Vue 的基础环境,npm 是包管理工具。从 Node.js 官网 下载并安装最新稳定版本。安装完成后,在终端运行以下命令验…