码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • vue前端实现下载文件功能


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

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

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

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

    第一种:

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

    代码如下:

    <a :href="fileUrl" download="filename">下载文件a>
    1. export default {
    2. data() {
    3. return {
    4. fileUrl: '/path/to/file.pdf',
    5. };
    6. },
    7. };

    第二种:

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

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

    1. downloadFile() {
    2. window.open('/path/to/file.pdf', '_blank');
    3. },

    第三种:

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

    1. downloadFile() {
    2. const iframe = document.createElement('iframe');
    3. iframe.style.display = 'none';
    4. iframe.src = '/path/to/file.pdf';
    5. document.body.appendChild(iframe);
    6. },

    第四种:

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

    1. downloadFile() {
    2. axios({
    3. url: '/download',
    4. method: 'POST',
    5. responseType: 'blob',
    6. data: {
    7. // 可以根据需要传递参数
    8. },
    9. }).then((response) => {
    10. const url = window.URL.createObjectURL(new Blob([response.data]));
    11. const link = document.createElement('a');
    12. link.href = url;
    13. link.setAttribute('download', 'filename.pdf');
    14. document.body.appendChild(link);
    15. link.click();
    16. });
    17. },

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

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

    第五种:

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

    1. import axios from 'axios';
    2. export default {
    3. methods: {
    4. downloadFile() {
    5. axios({
    6. url: '/path/to/file.pdf',
    7. method: 'GET',
    8. responseType: 'blob',
    9. }).then((response) => {
    10. const url = window.URL.createObjectURL(new Blob([response.data]));
    11. const link = document.createElement('a');
    12. link.href = url;
    13. link.setAttribute('download', 'filename.pdf');
    14. document.body.appendChild(link);
    15. link.click();
    16. });
    17. },
    18. },
    19. };

  • 相关阅读:
    利用TreeMap来达成离散化的目的
    车联网行业报告及摘要
    HTML-界面设计字体背景颜色-下拉列表框-margin-top失效-Div换行
    HTX 与 Zebec Protocol 展开深度合作,并将以质押者的身份参与 ZBC Staking
    nvm管理(切换)node版本,方便vue2,vue3+ts开发
    chrome extensions mv3通过content scripts注入/获取原网站的window数据
    在两个排序数组中找到上中位数
    web端三维重建算法-colmap++
    零信任沙盒
    【Jenkins】win 10 / win 11:Jenkins 的下载、安装、部署(Jenkins 2.365 基于 Java 17)
  • 原文地址:https://blog.csdn.net/laosao_66/article/details/137126373
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号