当前位置:首页 > VUE

vue文件下载实现

2026-01-15 08:35:09VUE

使用 Blob 对象下载文件

在 Vue 中可以通过创建 Blob 对象实现文件下载。通过将后端返回的二进制数据转换为 Blob,再生成下载链接触发浏览器下载行为。

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', 'filename.ext')
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
})

使用 FileSaver.js 库

FileSaver.js 提供了更简单的文件保存接口,适用于大多数现代浏览器。安装后可直接调用 saveAs 方法。

vue文件下载实现

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

axios.get('/api/download', { responseType: 'blob' }).then(response => {
  saveAs(response.data, 'filename.ext')
})

处理大文件分片下载

对于大文件下载,可以实现分片下载功能。通过设置 Range 请求头获取文件片段,最后合并所有片段。

vue文件下载实现

async function downloadLargeFile(url, filename) {
  const chunkSize = 1024 * 1024 // 1MB
  let startByte = 0
  let chunks = []

  while(true) {
    const endByte = startByte + chunkSize - 1
    const response = await axios.get(url, {
      responseType: 'blob',
      headers: { 'Range': `bytes=${startByte}-${endByte}` }
    })

    if(response.status === 206) {
      chunks.push(await response.data.arrayBuffer())
      startByte += chunkSize
    } else {
      break
    }
  }

  const blob = new Blob(chunks)
  saveAs(blob, filename)
}

前端生成文件下载

对于需要在前端生成文件内容再下载的场景,可以直接创建数据 URL 实现下载。

function downloadText(content, filename) {
  const blob = new Blob([content], { type: 'text/plain' })
  const url = URL.createObjectURL(blob)
  const a = document.createElement('a')
  a.href = url
  a.download = filename
  a.click()
  URL.revokeObjectURL(url)
}

处理下载进度显示

通过 axios 的 onDownloadProgress 配置可以获取下载进度,适用于需要显示进度条的场合。

axios.get('/api/download', {
  responseType: 'blob',
  onDownloadProgress: progressEvent => {
    const percent = Math.round(
      (progressEvent.loaded * 100) / progressEvent.total
    )
    console.log(`下载进度: ${percent}%`)
  }
}).then(response => {
  saveAs(response.data, 'file.ext')
})

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

相关文章

vue实现tab换行

vue实现tab换行

Vue实现Tab切换的常见方法 使用Vue实现Tab切换功能可以通过多种方式完成,以下是几种常见的方法: 动态组件结合v-if或v-show 通过v-if或v-show控制不同Tab内容的显示…

vue表格重置怎么实现

vue表格重置怎么实现

重置表格数据的方法 在Vue中重置表格数据通常需要操作绑定的数据源,以下是几种常见实现方式: 直接重置数据源 // 假设表格绑定的是tableData this.tableData = [...t…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 使用window.print()方法 这是最简单的打印方式,直接调用浏览器的打印功能。 me…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…