当前位置:首页 > VUE

vue如何实现文件下载

2026-01-21 09:50:11VUE

Vue 实现文件下载的方法

使用 <a> 标签下载

通过动态创建 <a> 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 对象的情况。

<template>
  <button @click="downloadFile">下载文件</button>
</template>

<script>
export default {
  methods: {
    downloadFile() {
      const link = document.createElement('a');
      link.href = '文件URL或Blob对象';
      link.download = '文件名.扩展名';
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    }
  }
};
</script>

通过 Blob 对象下载

适用于从 API 获取二进制数据(如后端返回的文件流)的场景。

axios.get('API地址', { 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);
});

使用 FileSaver.js 库

通过第三方库简化下载流程,支持更复杂的文件类型处理。

vue如何实现文件下载

安装依赖:

npm install file-saver

使用示例:

vue如何实现文件下载

import { saveAs } from 'file-saver';

// 保存文本
saveAs(new Blob(['文件内容'], { type: 'text/plain' }), 'example.txt');

// 保存图片
fetch('image.png').then(res => res.blob()).then(blob => {
  saveAs(blob, 'image.png');
});

处理后端返回的文件流

当后端返回文件流时,需正确设置响应类型和头部信息。

axios({
  method: 'get',
  url: '下载接口',
  responseType: 'blob'
}).then(res => {
  const blob = new Blob([res.data]);
  const fileName = res.headers['content-disposition']
    ? res.headers['content-disposition'].split('filename=')[1]
    : 'default_name';

  const link = document.createElement('a');
  link.href = window.URL.createObjectURL(blob);
  link.download = decodeURIComponent(fileName);
  link.click();
});

大文件分块下载

对于大文件下载,可采用分块处理方式优化体验。

async function downloadLargeFile(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);
  saveAs(blob, fileName);
}

注意事项

  • 跨域问题需确保服务器配置正确的 CORS 头
  • 移动端部分浏览器可能限制自动下载行为
  • 文件名中文乱码问题建议使用 decodeURIComponent 处理
  • 大文件下载建议显示进度条提升用户体验

分享给朋友:

相关文章

vue如何实现拖动

vue如何实现拖动

Vue 实现拖动的几种方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,通过 draggable 属性和相关事件实现拖动功能。 <template> &…

vue如何实现单选

vue如何实现单选

Vue 实现单选的方法 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定到同一个变量,确保同一时间只有一个选…

vue如何实现注册

vue如何实现注册

Vue 注册功能实现步骤 注册功能通常涉及前端表单、数据验证、与后端API交互等环节。以下是基于Vue 3和Element Plus的典型实现方式: 表单设计与数据绑定 使用Vue的v-model…

vue实现静态文件下载

vue实现静态文件下载

实现静态文件下载的方法 在Vue项目中实现静态文件下载可以通过多种方式完成,以下是几种常见的方法: 使用<a>标签下载 将静态文件放置在项目的public目录下,通过<a&g…

Vue如何实现多级域名

Vue如何实现多级域名

Vue 实现多级域名的方法 Vue 本身是一个前端框架,多级域名的实现通常需要结合后端配置和前端路由。以下是几种常见的方法: 使用路由动态匹配 在 Vue Router 中可以通过动态路由参数匹配…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…