vue前端实现下载文件功能

首先介绍一下我使用a标签方法碰到的错误:

点击下载后一直显示无法下载,更换浏览器也不行,后来找到了错误所在。

错误原因就是我把路径写在与我存图片的路径目录下面了 src/assets/... ,这样是不对的,应该把你需要下载的文件放在跟src同级的目录下或者放在publice目录里面,就是与你的网页图标文件favicon.ico以及index.html 这两个文件同级就好了,由于**public 目录下的文件** 可以直接通过 URL 访问,您可以简单地指定该文件的 URL,例如:

javascript 复制代码
loadFile() {
  let url = '/upload_template.csv'; // public 目录下的文件的 URL
  let link = document.createElement('a'); // 创建一个 <a> 元素
  link.href = url; // 设置链接的 href 属性为文件的 URL
  link.download = 'upload_template.csv'; // 设置下载的文件名
  link.style.display = 'none'; // 隐藏链接
  document.body.appendChild(link); // 将链接添加到文档中
  link.click(); // 模拟点击链接以触发下载
  document.body.removeChild(link); // 下载完成后移除链接
}

第一种:

使用<a>标签下载文件 :你可以在Vue组件中使用<a>标签创建一个链接,设置href属性为文件的URL,然后使用download属性指定文件名。这样点击链接时会触发文件下载。

代码如下:

html 复制代码
<a :href="fileUrl" download="filename">下载文件</a>
javascript 复制代码
export default {
  data() {
    return {
      fileUrl: '/path/to/file.pdf',
    };
  },
};

第二种:

通过window.open()下载文件:可以通过打开一个新窗口来实现文件下载。

window.open就是打开了一个新网页直接在新网页访问文件地址了,只要访问文件地址,就能下载文件。这时候后端返回的是文件流直接渲染,不需要url再打开下载了

javascript 复制代码
downloadFile() {
  window.open('/path/to/file.pdf', '_blank');
},

第三种:

通过创建iframe下载文件:创建一个隐藏的iframe,并设置其src属性为文件的URL,这样文件将会在iframe中加载并自动下载。

javascript 复制代码
downloadFile() {
  const iframe = document.createElement('iframe');
  iframe.style.display = 'none';
  iframe.src = '/path/to/file.pdf';
  document.body.appendChild(iframe);
},

第四种:

通过向后端发送POST请求获取文件流并使用Blob格式处理文件下载:在这种方法中,前端向后端发送POST请求,后端返回文件流,前端通过Blob对象处理并下载文件。

javascript 复制代码
downloadFile() {
  axios({
    url: '/download',
    method: 'POST',
    responseType: 'blob',
    data: {
      // 可以根据需要传递参数
    },
  }).then((response) => {
    const url = window.URL.createObjectURL(new Blob([response.data]));
    const link = document.createElement('a');
    link.href = url;
    link.setAttribute('download', 'filename.pdf');
    document.body.appendChild(link);
    link.click();
  });
},

如果后端提供的下载接口是get类型,可以直接使用方法一和二和三,简单又便捷;当然如果想使用方法四也是可以的,不过感觉有点舍近求远了。

如果后端提供的下载接口是post类型,就必须要用方法四了。

第五种:

通过Ajax请求下载文件 :使用Vue的HTTP库(如axios)发送GET请求来获取文件数据,然后使用Blob对象创建一个URL,并将其赋给一个隐藏的<a>标签,最后模拟点击这个链接来下载文件。

javascript 复制代码
import axios from 'axios';

export default {
  methods: {
    downloadFile() {
      axios({
        url: '/path/to/file.pdf',
        method: 'GET',
        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.pdf');
        document.body.appendChild(link);
        link.click();
      });
    },
  },
};
相关推荐
崔庆才丨静觅6 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60617 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了7 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅7 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅7 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅8 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment8 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅8 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊8 小时前
jwt介绍
前端
爱敲代码的小鱼8 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax