当前位置:首页 > VUE

vue 实现下载功能

2026-01-21 10:26:43VUE

使用 window.open 直接下载

通过 window.open 直接打开文件链接触发下载,适用于简单的文件下载场景。

window.open('文件URL', '_blank');

使用 <a> 标签下载

动态创建 <a> 标签并设置 download 属性,适合需要自定义文件名的情况。

const link = document.createElement('a');
link.href = '文件URL';
link.download = '自定义文件名.txt'; // 设置下载文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

通过 Blob 对象下载

适用于需要处理二进制数据或后端返回文件流的场景。

axios.get('文件URL', { responseType: 'blob' }).then(response => {
  const url = window.URL.createObjectURL(new Blob([response.data]));
  const link = document.createElement('a');
  link.href = url;
  link.download = '文件名.pdf';
  link.click();
  window.URL.revokeObjectURL(url); // 释放内存
});

下载后端返回的 Base64 数据

将 Base64 数据转换为 Blob 后下载。

function downloadBase64(base64Data, fileName) {
  const byteCharacters = atob(base64Data.split(',')[1]);
  const byteNumbers = new Array(byteCharacters.length);
  for (let i = 0; i < byteCharacters.length; i++) {
    byteNumbers[i] = byteCharacters.charCodeAt(i);
  }
  const byteArray = new Uint8Array(byteNumbers);
  const blob = new Blob([byteArray], { type: 'application/octet-stream' });
  const url = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.download = fileName;
  link.click();
}

封装为 Vue 方法

在 Vue 组件中封装可复用的下载方法。

methods: {
  downloadFile(url, fileName) {
    const link = document.createElement('a');
    link.href = url;
    link.download = fileName || url.split('/').pop();
    link.style.display = 'none';
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
  }
}

处理大文件分片下载

通过 Range 请求头实现大文件分片下载。

async function downloadLargeFile(url, fileName, chunkSize = 1024 * 1024) {
  const response = await fetch(url, { headers: { Range: `bytes=0-${chunkSize}` } });
  const totalSize = parseInt(response.headers.get('content-range').split('/')[1]);
  const blob = await response.blob();
  const chunks = [blob];

  for (let start = chunkSize; start < totalSize; start += chunkSize) {
    const end = Math.min(start + chunkSize, totalSize);
    const chunkResponse = await fetch(url, { headers: { Range: `bytes=${start}-${end}` } });
    chunks.push(await chunkResponse.blob());
  }

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

注意事项

  • 跨域下载需确保服务器配置 CORS 头部(如 Access-Control-Allow-Origin)。
  • 动态生成 URL 时注意内存释放,调用 URL.revokeObjectURL()
  • 移动端部分浏览器可能限制自动下载,需用户主动触发事件。
  • 文件名包含中文时建议使用 encodeURIComponent() 处理。

vue 实现下载功能

标签: 功能vue
分享给朋友:

相关文章

vue编辑功能怎么实现

vue编辑功能怎么实现

Vue 编辑功能的实现方法 1. 数据绑定与表单处理 使用 v-model 实现双向数据绑定,将表单输入与 Vue 实例的数据属性关联。例如: <template> <i…

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

vue实现多选题

vue实现多选题

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

vue实现活动倒计时

vue实现活动倒计时

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

实现vue

实现vue

安装Vue.js 通过npm安装Vue.js是最常见的方式。确保已安装Node.js和npm,运行以下命令: npm install vue 或者使用CDN直接引入: <script s…

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…