当前位置:首页 > VUE

vue实现文件下载功能

2026-02-24 09:19:00VUE

Vue 实现文件下载功能的方法

使用 <a> 标签下载

通过动态创建 <a> 标签实现文件下载,适用于已知文件 URL 的场景:

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

<script>
export default {
  methods: {
    downloadFile() {
      const link = document.createElement('a');
      link.href = 'https://example.com/file.pdf';
      link.download = 'file.pdf';
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    }
  }
}
</script>

通过 Blob 对象下载

适用于需要从后端 API 获取二进制数据的场景:

<script>
export default {
  methods: {
    async downloadFile() {
      try {
        const response = await axios.get('/api/download', {
          responseType: 'blob'
        });
        const url = window.URL.createObjectURL(new Blob([response.data]));
        const link = document.createElement('a');
        link.href = url;
        link.download = 'filename.ext';
        document.body.appendChild(link);
        link.click();
        window.URL.revokeObjectURL(url);
        document.body.removeChild(link);
      } catch (error) {
        console.error('下载失败', error);
      }
    }
  }
}
</script>

使用 FileSaver.js 库

FileSaver.js 提供了更简单的文件保存接口:

npm install file-saver
<script>
import { saveAs } from 'file-saver';

export default {
  methods: {
    downloadFile() {
      saveAs('https://example.com/file.pdf', 'custom-filename.pdf');
    }
  }
}
</script>

处理权限问题

某些浏览器可能阻止跨域下载,需要确保:

  • 文件 URL 与网站同源
  • 服务器配置正确的 CORS 头
  • 对于用户生成内容,使用 Blob 方式更可靠

显示下载进度

对于大文件,可以添加进度提示:

vue实现文件下载功能

<script>
export default {
  data() {
    return {
      downloadProgress: 0
    };
  },
  methods: {
    async downloadLargeFile() {
      const response = await axios.get('/api/large-file', {
        responseType: 'blob',
        onDownloadProgress: progressEvent => {
          this.downloadProgress = Math.round(
            (progressEvent.loaded * 100) / progressEvent.total
          );
        }
      });
      // ...处理下载逻辑
    }
  }
}
</script>

标签: 功能文件
分享给朋友:

相关文章

vue实现拨号功能

vue实现拨号功能

Vue实现拨号功能的方法 使用HTML5的tel协议 在Vue模板中直接使用<a>标签的tel:协议实现拨号功能。这种方法适用于移动端浏览器,点击后会调起系统的拨号界面。 <tem…

原生实现vue功能

原生实现vue功能

原生 JavaScript 实现 Vue 核心功能 使用原生 JavaScript 模拟 Vue 的核心功能(如数据绑定、虚拟 DOM、响应式更新等),可以通过以下方式实现: 数据响应式系统 通过…

vue实现论坛功能

vue实现论坛功能

实现论坛功能的核心模块 论坛功能通常包含用户发帖、回帖、分类浏览、搜索等核心模块。Vue.js 作为前端框架,需配合后端 API 实现数据交互。 基础项目结构搭建 使用 Vue CLI 或 Vite…

vue实现换页功能

vue实现换页功能

Vue 实现分页功能 使用第三方库(如 Element UI) 安装 Element UI: npm install element-ui 在 main.js 中引入: import Vue fr…

vue实现置顶功能

vue实现置顶功能

实现置顶功能的基本思路 在Vue中实现置顶功能通常涉及对数据列表的操作,通过调整数组元素的顺序或添加标识属性来实现。以下是几种常见方法: 方法一:通过数组排序实现 利用数组的sort方法,根据元素的…

vue实现目录功能

vue实现目录功能

Vue实现目录功能的方法 基于路由的目录结构 在Vue项目中,可以通过路由配置自动生成目录结构。使用vue-router的routes数组可以定义页面层级关系,结合递归组件渲染目录树。 // rou…