当前位置:首页 > 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 获取二进制数据的场景:

vue实现文件下载功能

<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 提供了更简单的文件保存接口:

vue实现文件下载功能

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 方式更可靠

显示下载进度

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

<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实现tab功能

vue实现tab功能

Vue 实现 Tab 功能的方法 使用动态组件和 v-if 指令 通过 v-if 或 v-show 控制不同 Tab 内容的显示与隐藏。这种方法适合简单的 Tab 切换需求。 <tem…

vue实现文件预览展示

vue实现文件预览展示

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

vue实现用户添加功能

vue实现用户添加功能

实现用户添加功能的步骤 表单设计与数据绑定 在Vue组件中设计一个表单,包含用户名、邮箱、密码等字段。使用v-model指令实现双向数据绑定,将表单输入与组件的数据属性关联起来。 <temp…

php实现分页功能

php实现分页功能

PHP实现分页功能的方法 数据库查询与分页逻辑 使用SQL的LIMIT和OFFSET实现分页。假设每页显示10条数据,当前页码为$page: $perPage = 10; $page = isse…

uniapp支付功能怎么实现

uniapp支付功能怎么实现

uniapp支付功能实现方法 准备工作 注册微信支付、支付宝等平台的开发者账号,获取必要的商户ID(mch_id)、API密钥(key)、应用ID(appid)等信息。确保项目已配置好相关支付SDK。…

vue实现拨号功能

vue实现拨号功能

Vue 实现拨号功能 使用 tel: 协议实现基础拨号 在 Vue 中可以通过 HTML 的 <a> 标签结合 tel: 协议实现拨号功能。这种方式适用于移动端浏览器,点击后会直接调用系统…