当前位置:首页 > VUE

vue实现get下载

2026-03-29 02:40:33VUE

Vue 实现 GET 下载

方法一:使用 window.opena 标签

直接通过浏览器原生方式触发下载,适用于简单的 GET 请求下载场景。

// 方式1:直接通过 window.open 触发
window.open('/api/download?fileId=123', '_blank');

// 方式2:动态创建 a 标签并触发点击
const link = document.createElement('a');
link.href = '/api/download?fileId=123';
link.download = 'filename.ext'; // 可选,设置下载文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

方法二:使用 axios 处理二进制流

适用于需要添加请求头或处理权限验证等复杂场景,后端需返回二进制流。

axios({
  method: 'get',
  url: '/api/download',
  responseType: 'blob', // 关键:指定响应类型为二进制流
  params: { fileId: 123 }
}).then(response => {
  const blob = new Blob([response.data]);
  const url = window.URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.download = 'filename.ext'; // 从响应头或自定义文件名
  link.click();
  window.URL.revokeObjectURL(url); // 释放内存
});

方法三:从响应头获取文件名

如果后端通过 Content-Disposition 返回文件名,可通过以下方式解析:

vue实现get下载

const contentDisposition = response.headers['content-disposition'];
const fileName = contentDisposition.split('filename=')[1].replace(/"/g, '');

注意事项

  • 跨域问题:确保后端配置了 Access-Control-Expose-Headers 暴露 Content-Disposition 等自定义头
  • 错误处理:添加 catch 处理网络或服务端错误
  • 大文件下载:建议使用分块下载或进度提示
  • 权限控制:可在请求头中添加 Authorization 等验证信息

完整示例(结合方法二和三)

axios.get('/api/download', {
  params: { fileId: 123 },
  responseType: 'blob'
}).then(response => {
  let fileName = 'default.ext';
  const disposition = response.headers['content-disposition'];
  if (disposition && disposition.indexOf('filename=') !== -1) {
    fileName = decodeURIComponent(
      disposition.split('filename=')[1].split(';')[0].replace(/"/g, '')
    );
  }

  const blob = new Blob([response.data]);
  const downloadUrl = window.URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = downloadUrl;
  a.download = fileName;
  document.body.appendChild(a);
  a.click();
  setTimeout(() => {
    document.body.removeChild(a);
    window.URL.revokeObjectURL(downloadUrl);
  }, 100);
}).catch(error => {
  console.error('下载失败:', error);
});

标签: vueget
分享给朋友:

相关文章

vue实现弹窗可切换

vue实现弹窗可切换

实现弹窗可切换的 Vue 方案 动态组件切换 通过 Vue 的 <component :is="currentComponent"> 动态加载不同弹窗组件,结合 v-if 控制显示状态。…

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

vue 组件实现

vue 组件实现

Vue 组件实现方法 单文件组件 (SFC) 使用 .vue 文件格式,包含模板、脚本和样式三部分: <template> <div class="example">{{…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展示…