当前位置:首页 > VUE

vue前端实现文件下载

2026-01-20 06:03:23VUE

使用 window.open 直接下载

通过 window.open 直接打开文件链接触发下载,适用于简单的文件下载场景。
将文件 URL 作为参数传入,浏览器会自动处理下载行为:

window.open('https://example.com/file.pdf', '_blank');

使用 <a> 标签动态触发下载

创建隐藏的 <a> 标签,设置 download 属性后模拟点击,适合需要自定义文件名的情况:

vue前端实现文件下载

const link = document.createElement('a');
link.href = 'https://example.com/file.pdf';
link.download = 'custom-filename.pdf'; // 指定下载文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

通过 Blob 对象下载二进制数据

当需要处理后端返回的二进制流(如 Axios 响应)时,可通过 Blob 转换并下载:

vue前端实现文件下载

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.download = 'file.zip';
  link.click();
  window.URL.revokeObjectURL(url); // 释放内存
});

处理大文件分片下载

对于大文件下载,可结合 Content-Range 实现分片下载与合并:

async function downloadLargeFile(url, fileName, chunkSize = 1024 * 1024) {
  let startByte = 0;
  const chunks = [];

  while (true) {
    const response = await fetch(url, {
      headers: { 'Range': `bytes=${startByte}-${startByte + chunkSize}` }
    });
    if (!response.ok) break;
    chunks.push(await response.blob());
    startByte += chunkSize;
  }

  const blob = new Blob(chunks);
  const link = document.createElement('a');
  link.href = URL.createObjectURL(blob);
  link.download = fileName;
  link.click();
}

添加下载进度提示

通过 Axios 的 onDownloadProgress 实现进度显示:

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

注意事项

  • 跨域问题需确保服务器配置 Access-Control-Allow-Origin
  • 部分浏览器可能限制非用户触发的下载行为,建议在按钮点击事件中触发
  • 移动端需测试兼容性,部分浏览器对 download 属性支持有限

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

相关文章

vue如何实现冒泡

vue如何实现冒泡

Vue 实现冒泡排序 在 Vue 中实现冒泡排序,可以通过数据绑定和响应式特性动态展示排序过程。以下是一个完整的实现示例,包含代码和详细说明。 数据准备 在 Vue 的 data 中定义一个数组作为…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue computed实现

vue computed实现

计算属性的基本用法 在Vue中,计算属性通过computed选项定义,用于声明依赖于其他属性的动态值。计算属性基于它们的依赖进行缓存,只有依赖发生变化时才会重新计算。 new Vue({ dat…

vue实现增加

vue实现增加

实现 Vue 中的新增功能 在 Vue 中实现新增功能通常涉及数据绑定、表单处理和状态管理。以下是几种常见的实现方式: 数据绑定与列表渲染 通过 v-model 绑定表单输入,使用数组的 push…

vue实现word文档实现预览

vue实现word文档实现预览

在Vue中实现Word文档预览可以通过多种方式实现,以下是几种常见的方法: 使用mammoth.js库 mammoth.js是一个将Word文档(.docx)转换为HTML的JavaScript库,…

vue怎样实现mvvm

vue怎样实现mvvm

Vue 实现 MVVM 的原理 Vue 的 MVVM(Model-View-ViewModel)模式通过数据绑定和响应式系统实现视图与数据的自动同步。以下是 Vue 实现 MVVM 的核心机制: 数…