当前位置:首页 > VUE

vue实现get下载

2026-01-16 02:21:32VUE

Vue 实现 GET 下载

使用 window.open 直接触发下载
适用于简单的 GET 请求下载,无需处理复杂逻辑。直接将文件 URL 通过 window.open 打开,浏览器会自动处理下载。

downloadFile() {
  const fileUrl = 'https://example.com/file.pdf';
  window.open(fileUrl, '_blank');
}

通过 axios 发送 GET 请求并处理二进制流
适用于需要添加请求头或处理后端返回的二进制流数据。

vue实现get下载

import axios from 'axios';

downloadFile() {
  axios({
    url: 'https://example.com/file.pdf',
    method: 'GET',
    responseType: 'blob', // 关键:指定响应类型为二进制流
    headers: {
      Authorization: 'Bearer your_token' // 可选:添加认证头
    }
  }).then(response => {
    const url = window.URL.createObjectURL(new Blob([response.data]));
    const link = document.createElement('a');
    link.href = url;
    link.setAttribute('download', 'filename.pdf'); // 设置下载文件名
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    window.URL.revokeObjectURL(url); // 释放内存
  });
}

处理动态文件名
若需从响应头中获取文件名(如后端通过 Content-Disposition 返回文件名):

vue实现get下载

const fileName = response.headers['content-disposition']
  ? response.headers['content-disposition'].split('filename=')[1]
  : 'default.pdf';
link.setAttribute('download', fileName);

注意事项

  • 跨域问题:确保后端配置了 CORS 允许前端域名访问。
  • 大文件下载:建议分片下载或使用后端提供的断点续传接口。
  • 错误处理:添加 catch 块处理网络或权限错误。

完整封装示例

async downloadFile(url, fileName = '') {
  try {
    const response = await axios({
      url,
      method: 'GET',
      responseType: 'blob'
    });
    const actualFileName = fileName || 
      response.headers['content-disposition']?.split('filename=')[1] || 
      'download';
    const blobUrl = window.URL.createObjectURL(new Blob([response.data]));
    const link = document.createElement('a');
    link.href = blobUrl;
    link.download = actualFileName;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    window.URL.revokeObjectURL(blobUrl);
  } catch (error) {
    console.error('Download failed:', error);
  }
}

标签: vueget
分享给朋友:

相关文章

vue前端实现打印功能

vue前端实现打印功能

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

vue实现继承语法糖

vue实现继承语法糖

在Vue中实现继承可以通过多种方式模拟类继承的效果,以下是常见的几种方法: 使用mixins实现逻辑复用 通过Vue的mixins机制共享组件选项,达到类似继承的效果: const BaseC…

vue实现多选题

vue实现多选题

Vue实现多选题的方法 使用Vue实现多选题功能,可以通过v-model绑定数组、动态渲染选项、以及处理选中状态来实现。以下是一个完整的实现示例: 基础实现代码 <template>…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keywor…

vue实现绑卡的原理

vue实现绑卡的原理

Vue 实现绑卡的原理 Vue 实现绑卡功能通常涉及前端表单处理、数据绑定、验证以及和后端 API 的交互。以下是实现绑卡功能的核心原理和步骤: 数据绑定与表单处理 Vue 通过 v-model…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(…