当前位置:首页 > VUE

Vue 实现下载

2026-01-18 23:09:16VUE

Vue 实现文件下载的方法

前端下载(纯前端生成文件)

适用于需要动态生成文件内容并下载的场景,如导出表格数据为 CSV 或 Excel。

// 创建 Blob 对象并触发下载
const downloadFile = (content, fileName, type = 'text/plain') => {
  const blob = new Blob([content], { type })
  const url = URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = fileName
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  URL.revokeObjectURL(url)
}

// 使用示例(导出CSV)
const exportCSV = () => {
  const csvContent = '姓名,年龄\n张三,25\n李四,30'
  downloadFile(csvContent, '用户数据.csv', 'text/csv')
}

后端接口下载

适用于从服务器获取文件进行下载的场景,如下载服务器上的 PDF 或图片。

// 通过接口下载文件
const downloadFromServer = (url, fileName) => {
  fetch(url)
    .then(response => response.blob())
    .then(blob => {
      const downloadUrl = URL.createObjectURL(blob)
      const a = document.createElement('a')
      a.href = downloadUrl
      a.download = fileName
      document.body.appendChild(a)
      a.click()
      document.body.removeChild(a)
      URL.revokeObjectURL(downloadUrl)
    })
}

// 使用示例
downloadFromServer('/api/download/file.pdf', '文档.pdf')

使用 axios 下载文件

当需要处理更复杂的请求(如带认证头)时,可以使用 axios。

import axios from 'axios'

const downloadWithAxios = (url, fileName) => {
  axios({
    url,
    method: 'GET',
    responseType: 'blob',
    headers: { Authorization: 'Bearer your_token' }
  }).then(response => {
    const downloadUrl = URL.createObjectURL(new Blob([response.data]))
    const link = document.createElement('a')
    link.href = downloadUrl
    link.download = fileName
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link)
    URL.revokeObjectURL(downloadUrl)
  })
}

处理大文件下载

对于大文件下载,可以显示进度条。

const downloadLargeFile = (url, fileName) => {
  axios({
    url,
    method: 'GET',
    responseType: 'blob',
    onDownloadProgress: progressEvent => {
      const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total)
      console.log(`下载进度: ${percent}%`)
      // 可以更新 Vue 组件中的进度状态
    }
  }).then(response => {
    // 同上处理下载
  })
}

注意事项

Vue 实现下载

  • 跨域问题需要后端配置 CORS
  • 移动端可能需要特殊处理
  • 某些浏览器可能会拦截弹出式下载窗口
  • 对于敏感文件,建议通过后端验证权限

以上方法可以根据实际需求组合使用,前端生成适合简单数据导出,后端下载适合已有文件的场景。

标签: Vue
分享给朋友:

相关文章

Vue实现音乐列表

Vue实现音乐列表

Vue 实现音乐列表的方法 数据准备与绑定 在 Vue 中实现音乐列表,首先需要准备音乐数据。可以通过数组形式存储音乐信息,例如歌曲名称、歌手、封面图片和播放链接。数据可以存储在组件的 data 属性…

Vue submit实现导出

Vue submit实现导出

Vue 中实现导出功能的方法 在 Vue 项目中实现导出功能,通常可以通过前端生成文件或调用后端接口导出数据。以下是几种常见的实现方式: 前端生成 Excel 文件 使用 xlsx 库可以方便地在前…

Vue拖拽怎么实现

Vue拖拽怎么实现

Vue拖拽实现方法 使用Vue实现拖拽功能可以通过原生HTML5的拖拽API或第三方库如vuedraggable来实现。以下是两种常见的方法: 使用HTML5拖拽API HTML5提供了原生的拖拽A…

Vue的扫雷实现

Vue的扫雷实现

Vue 扫雷实现步骤 准备工作 确保已安装 Vue CLI 或通过 CDN 引入 Vue。创建一个 Vue 项目或单文件组件,初始化游戏所需的数据结构(如雷区矩阵、雷数量、游戏状态等)。 数据结构设…

Vue实现滚动字幕

Vue实现滚动字幕

Vue实现滚动字幕的方法 使用CSS动画实现 通过CSS的@keyframes和transform属性实现水平滚动效果,结合Vue的动态绑定控制内容。 <template> <…

Vue中div实现alert

Vue中div实现alert

Vue中实现div模拟alert弹窗 在Vue中可以通过组件化方式实现类似alert功能的div弹窗,以下是具体实现方案: 创建基础弹窗组件 新建Alert.vue文件,包含模板、样式和逻辑: &…