Vue中下载不同文件的几种方式

当在Vue中需要实现文件下载功能时,我们可以有多种方式来完成。下面将介绍五种常用的方法。

1. 使用window.open方法下载文件
复制代码
<template>
  <div>
    <button @click="downloadFile('file1.pdf')">下载文件1</button>
    <button @click="downloadFile('file2.jpg')">下载文件2</button>
  </div>
</template>

<script>
export default {
  methods: {
    downloadFile(fileName) {
      const fileUrl = '/path/to/' + fileName; // 文件的URL地址
      window.open(fileUrl);
    }
  }
};
</script>

在上面的示例中,我们使用了window.open方法来打开一个新窗口,并直接访问文件的URL地址,从而触发文件下载。

2. 使用<a>标签进行文件下载
复制代码
<template>
  <div>
    <button @click="downloadFile('file1.pdf')">下载文件1</button>
    <button @click="downloadFile('file2.jpg')">下载文件2</button>
  </div>
</template>

<script>
export default {
  methods: {
    downloadFile(fileName) {
      const fileUrl = '/path/to/' + fileName; // 文件的URL地址
      const link = document.createElement('a');
      link.href = fileUrl;
      link.setAttribute('download', fileName);
      link.click();
    }
  }
};
</script>

在上面的示例中,我们首先创建一个<a>标签,然后设置其href属性为文件的URL地址,download属性为要下载的文件名。最后,通过调用click()方法触发链接的点击事件,实现文件的下载。

3. 使用axios下载文件
复制代码
<template>
  <div>
    <button @click="downloadFile('file1.pdf')">下载文件1</button>
    <button @click="downloadFile('file2.jpg')">下载文件2</button>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  methods: {
    downloadFile(fileName) {
      const fileUrl = '/path/to/' + fileName; // 文件的URL地址
      axios.get(fileUrl, { responseType: 'blob' })
        .then(response => {
          const url = window.URL.createObjectURL(new Blob([response.data]));
          const link = document.createElement('a');
          link.href = url;
          link.setAttribute('download', fileName);
          document.body.appendChild(link);
          link.click();
        })
        .catch(error => {
          console.error(error);
        });
    }
  }
};
</script>

在上面的示例中,我们使用了axios发送GET请求,设置responseTypeblob以便获取文件的二进制数据。然后,通过创建临时URL、创建<a>标签并设置下载属性,实现文件的下载。

4. 使用Fetch API下载文件
复制代码
<template>
  <div>
    <button @click="downloadFile('file1.pdf')">下载文件1</button>
    <button @click="downloadFile('file2.jpg')">下载文件2</button>
  </div>
</template>

<script>
export default {
  methods: {
    downloadFile(fileName) {
      const fileUrl = '/path/to/' + fileName; // 文件的URL地址
      fetch(fileUrl)
        .then(response => response.blob())
        .then(blob => {
          const url = window.URL.createObjectURL(blob);
          const link = document.createElement('a');
          link.href = url;
          link.setAttribute('download', fileName);
          document.body.appendChild(link);
          link.click();
        })
        .catch(error => {
          console.error(error);
        });
    }
  }
};
</script>

在上面的示例中,我们使用了Fetch API发送GET请求,并使用.blob()方法将返回的数据转换为blob对象。然后,通过创建临时URL、创建<a>标签并设置下载属性,实现文件的下载。

5. 使用Vue的$download方法下载文件
复制代码
<template>
  <div>
    <button @click="downloadFile('file1.pdf')">下载文件1</button>
    <button @click="downloadFile('file2.jpg')">下载文件2</button>
  </div>
</template>

<script>
export default {
  methods: {
    downloadFile(fileName) {
      const fileUrl = '/path/to/' + fileName; // 文件的URL地址
      this.$download(fileUrl, fileName);
    }
  }
};
</script>

在这个示例中,我们直接调用Vue实例的$download方法,并传入文件的URL地址和下载的文件名,即可实现文件的下载。

6. 使用创建a标签方法下载文件
复制代码
<template>
  <div>
    <button @click="downloadFile('file1.pdf')">下载文件1</button>
    <button @click="downloadFile('file2.jpg')">下载文件2</button>
  </div>
</template>

<script>
export default {
  methods: {
    downloadFile(fileName) {
      const folderPath = '/path/to/folder/'; // 文件所在的文件夹路径
      const fileUrl = folderPath + fileName; // 拼接文件夹路径和文件名
      const link = document.createElement('a');
      link.href = fileUrl;
      link.setAttribute('download', fileName);
      link.click();
    }
  }
};
</script>

在这个示例中,我们首先定义了文件所在的文件夹路径folderPath,然后通过拼接文件夹路径和文件名来构建完整的文件URL地址fileUrl。接着,我们创建一个<a>标签,并设置其href属性为文件URL,download属性为要下载的文件名。最后,通过调用click()方法触发链接的点击事件,实现文件的下载。

相关推荐
徐小夕2 分钟前
花了一天时间,开源了一套精美且支持复杂操作的表格编辑器tablejs
前端·算法·github
Mintopia3 分钟前
Next.js 单元测试究竟该选 JTest 还是 Vitest?
前端·javascript·next.js
wusp19943 分钟前
项目实战——“微商城”前后台【005】之前台项目首页编写
vue.js·vant·底部导航栏
Alice-YUE4 分钟前
【CSS学习笔记3】css特性
前端·css·笔记·html
bug_kada4 分钟前
告别页面卡顿!用DocumentFragment打造高性能DOM操作
前端
遂心_5 分钟前
深入浅出 querySelector:现代DOM选择器的终极指南
前端·javascript·react.js
遂心_8 分钟前
DOM元素内容修改全攻略:从innerHTML到现代API的最佳实践
前端·javascript·react.js
溯水流光9 分钟前
React 源码解析
前端
Aomnitrix11 分钟前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
光影少年13 分钟前
Typescript工具类型
前端·typescript·掘金·金石计划