当前位置:首页 > VUE

vue axios实现下载

2026-02-22 16:46:50VUE

使用 Axios 实现文件下载

在 Vue 项目中,通过 Axios 实现文件下载需要正确处理响应类型和触发浏览器下载行为。以下是具体实现方法:

配置 Axios 请求

设置 responseType'blob',确保正确处理二进制流数据:

vue axios实现下载

axios({
  url: '/api/download',
  method: 'GET',
  responseType: 'blob' // 关键配置
})

处理响应并触发下载

将返回的 Blob 数据转换为可下载的 URL:

.then(response => {
  const blob = new Blob([response.data])
  const downloadUrl = window.URL.createObjectURL(blob)
  const link = document.createElement('a')

  link.href = downloadUrl
  link.setAttribute('download', 'filename.ext') // 设置文件名
  document.body.appendChild(link)
  link.click()

  // 清理资源
  link.remove()
  window.URL.revokeObjectURL(downloadUrl)
})

处理错误情况

添加错误处理逻辑,特别是网络请求失败或后端返回错误时:

vue axios实现下载

.catch(error => {
  console.error('下载失败:', error)
  // 可以在此处添加用户提示
})

完整示例代码

export function downloadFile() {
  axios({
    url: '/api/download',
    method: 'GET',
    responseType: 'blob'
  }).then(response => {
    const blob = new Blob([response.data])
    const url = window.URL.createObjectURL(blob)
    const a = document.createElement('a')

    a.style.display = 'none'
    a.href = url
    a.download = 'document.pdf'
    document.body.appendChild(a)
    a.click()

    window.URL.revokeObjectURL(url)
    a.remove()
  }).catch(err => {
    alert('文件下载失败')
    console.error(err)
  })
}

后端配合要求

后端需要正确设置响应头:

  • Content-Type: 对应文件类型的 MIME 类型
  • Content-Disposition: attachment; filename="filename.ext"

进度显示(可选)

对于大文件下载,可以添加进度提示:

axios({
  // ...其他配置
  onDownloadProgress: progressEvent => {
    const percent = Math.round(
      (progressEvent.loaded * 100) / progressEvent.total
    )
    console.log(`下载进度: ${percent}%`)
  }
})

注意事项

  1. 跨域请求需确保后端配置了 CORS 头
  2. 文件名可以从响应头 Content-Disposition 中提取更准确
  3. IE浏览器需要使用 window.navigator.msSaveOrOpenBlob 兼容方案

标签: vueaxios
分享给朋友:

相关文章

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一个…

vue课程实现

vue课程实现

Vue 课程实现方案 课程内容设计 Vue课程应从基础到高级逐步展开,涵盖Vue核心概念、组件化开发、状态管理、路由、构建工具等。基础部分包括Vue实例、模板语法、计算属性和侦听器。中级部分深入组件通…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue 实现折叠

vue 实现折叠

Vue 实现折叠功能的方法 在 Vue 中实现折叠功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-if 或 v-show 控制显示隐藏 通过绑定一个布尔值变量,结合 v-if 或 v…

vue实现侧导航

vue实现侧导航

Vue 实现侧边导航 使用 Vue 实现侧边导航可以通过多种方式完成,以下是一种常见的实现方法,结合 Vue Router 和动态组件。 基础结构 创建侧边导航栏的基本结构,通常使用 <ul&…