当前位置:首页 > 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.js结合其响应式特性和组件化开发方式,可以高效实现这一功能。 核心实现步骤 创建轨…

vue实现分页功能

vue实现分页功能

Vue 分页功能实现 在 Vue 中实现分页功能通常需要结合后端 API 或前端数据分页逻辑。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在 Vue 组件中处理分页逻辑。…

vue实现文件预览展示

vue实现文件预览展示

Vue 实现文件预览展示的方法 使用第三方库预览常见文件类型 对于常见的文件类型(如 PDF、图片、视频等),可以使用现成的 Vue 组件库来实现预览功能。 PDF 预览:使用 vue-pdf 或…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

vue实现注册功能

vue实现注册功能

前端实现注册功能 在Vue中实现注册功能通常需要结合表单验证、HTTP请求和状态管理。以下是一个基于Vue 3和Element Plus的完整实现方案: 模板部分 <template>…

vue 分页功能实现

vue 分页功能实现

分页功能实现方法 使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 el-pagination,可以快速实现分页功能。 安装 Element UI: npm in…