当前位置:首页 > VUE

vue实现文件下载

2026-02-09 09:17:57VUE

使用 <a> 标签下载文件

通过动态创建 <a> 标签实现文件下载,适用于已知文件 URL 的情况。
在 Vue 组件中定义方法,动态设置 hrefdownload 属性,触发点击事件。

methods: {
  downloadFile(url, fileName) {
    const link = document.createElement('a');
    link.href = url;
    link.download = fileName || 'file';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
  }
}

通过 Blob 对象下载动态内容

当需要下载后端返回的二进制流(如 Axios 响应)时,可将数据转换为 Blob 对象,生成临时 URL。

axios.get('/api/download', { responseType: 'blob' }).then(response => {
  const blob = new Blob([response.data]);
  const url = window.URL.createObjectURL(blob);
  this.downloadFile(url, 'example.pdf'); // 复用前例方法
  window.URL.revokeObjectURL(url); // 释放内存
});

处理后端文件名

若后端通过响应头返回文件名,可从 content-disposition 头中提取:

const contentDisposition = response.headers['content-disposition'];
const fileName = contentDisposition.split('filename=')[1].trim();

大文件分块下载

对于大文件,可采用流式处理避免内存问题,使用 fetchReadableStream

async function downloadLargeFile(url) {
  const response = await fetch(url);
  const reader = response.body.getReader();
  const chunks = [];

  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    chunks.push(value);
  }

  const blob = new Blob(chunks);
  const objectUrl = URL.createObjectURL(blob);
  this.downloadFile(objectUrl, 'large_file.zip');
}

进度显示实现

通过 Axios 的 onDownloadProgress 事件实现下载进度条:

axios.get('/api/file', {
  responseType: 'blob',
  onDownloadProgress: progressEvent => {
    const percent = Math.round((progressEvent.loaded / progressEvent.total) * 100);
    console.log(`下载进度: ${percent}%`);
  }
}).then(response => {
  // 处理下载完成逻辑
});

vue实现文件下载

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

相关文章

简易实现vue

简易实现vue

简易 Vue 实现思路 核心是数据劫持结合发布-订阅模式,通过 Object.defineProperty 或 Proxy 监听数据变化,触发视图更新。 数据劫持实现 class Observer…

vue实现右下角弹框

vue实现右下角弹框

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

vue实现slider

vue实现slider

Vue 实现 Slider 组件 使用 Vue 实现 Slider 组件可以通过原生开发或借助第三方库。以下是两种常见方法: 原生实现 Slider 创建一个基础的 Slider 组件,通过 v-m…

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器(…

vue 实现注册

vue 实现注册

Vue 实现注册功能 注册功能通常包括表单验证、数据提交和用户反馈。以下是实现注册功能的步骤: 1. 创建注册表单组件 在 Vue 项目中创建一个注册表单组件,包含用户名、邮箱、密码等输入字段。…

vue如何实现

vue如何实现

Vue 实现方法 在 Vue 中实现功能通常涉及组件化开发、状态管理和响应式数据绑定。以下是几种常见的实现方式: 组件化开发 使用 Vue 的单文件组件(.vue 文件)结构,将 UI 拆分为可复用…