当前位置:首页 > VUE

vue前端实现文件下载

2026-02-20 22:07:39VUE

使用 Blob 对象和 URL.createObjectURL

通过创建 Blob 对象并生成临时 URL 实现文件下载。适用于后端返回文件流或前端生成文件的场景。

// 假设 response 是后端返回的文件流
const blob = new Blob([response.data], { type: 'application/octet-stream' });
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'filename.ext'; // 设置下载文件名
link.click();
window.URL.revokeObjectURL(url); // 释放内存

直接使用 a 标签下载

适用于已知文件 URL 且服务器允许直接下载的情况。

vue前端实现文件下载

<a href="/path/to/file.ext" download="custom-filename.ext">下载文件</a>

处理跨域文件下载

当文件位于不同域名时,可能需要后端配合设置 CORS 或通过代理下载。

vue前端实现文件下载

axios.get('/api/download', {
  responseType: 'blob',
  headers: {
    'Authorization': 'Bearer your_token'
  }
}).then(response => {
  const contentDisposition = response.headers['content-disposition'];
  const filename = contentDisposition.split('filename=')[1];
  const blob = new Blob([response.data]);
  // 后续步骤同第一种方法
});

大文件分片下载

对于大文件下载,可以显示下载进度并支持暂停续传。

const downloadFile = async (url, fileName) => {
  const response = await fetch(url);
  const reader = response.body.getReader();
  const contentLength = +response.headers.get('Content-Length');
  let receivedLength = 0;
  const chunks = [];

  while(true) {
    const {done, value} = await reader.read();
    if(done) break;
    chunks.push(value);
    receivedLength += value.length;
    console.log(`下载进度: ${(receivedLength/contentLength*100).toFixed(2)}%`);
  }

  const blob = new Blob(chunks);
  // 后续下载步骤
};

前端生成文件并下载

适用于需要在前端动态生成文件内容的场景。

const content = '文件内容';
const blob = new Blob([content], {type: 'text/plain'});
// 后续下载步骤同第一种方法

注意事项

  • 确保服务器正确设置了 Content-Disposition 响应头
  • 处理可能的错误情况,如网络中断或权限问题
  • 移动端可能需要特殊处理,某些浏览器对下载限制较多
  • 考虑添加下载进度提示和完成通知
  • 对于敏感文件,应通过授权验证后再允许下载

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

相关文章

vue前端实现登录

vue前端实现登录

实现登录功能的基本流程 使用Vue实现登录功能需要结合前端框架和后端API交互。以下是一个典型的实现方案: 安装必要依赖 确保项目已安装axios用于HTTP请求: npm install axi…

vue实现微博印象

vue实现微博印象

实现微博印象功能的核心思路 微博印象功能通常指用户发布微博后,系统自动分析文本内容并提取关键词或标签,以可视化形式展示。Vue实现该功能需要结合文本分析、关键词提取和前端渲染技术。 文本分析与关键词…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景。…