当前位置:首页 > VUE

vue前端实现文件下载

2026-01-20 06:03:23VUE

使用 window.open 直接下载

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

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

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

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

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 转换并下载:

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 中实现搜索功能通常涉及数据绑定、事件监听和过滤逻辑。以下是几种常见的实现方式: 使用计算属性过滤列表 <template> <div>…

vue实现下载暂停

vue实现下载暂停

Vue实现下载暂停功能 在Vue中实现下载暂停功能,通常需要结合XMLHttpRequest或Fetch API的AbortController来控制请求中断。以下是具体实现方法: 使用XMLHtt…

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的d…

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> <…

vue实现后退

vue实现后退

Vue 实现后退功能的方法 在 Vue 中实现后退功能通常可以通过以下几种方式完成,具体取决于应用场景和需求。 使用 window.history API 通过原生 JavaScript 的 win…

vue实现新闻

vue实现新闻

Vue 实现新闻功能 使用 Vue 实现新闻功能通常涉及新闻列表展示、新闻详情页、分类筛选等模块。以下是实现的基本思路和代码示例。 新闻列表展示 通过 Vue 组件展示新闻列表,通常使用 v-for…