前端用a标签实现静态资源文件(excel/word/pdf)下载

news/2024/5/14 3:19:22

接上文实现的 前端实现将二进制文件流,并下载为excel文件后,

实际项目中一般都会有一个模版下载的功能,一般都由服务端提供一个下载接口,返回文件流或url地址,然后前端再处理成对应需要的类型的文件。

但是,也有可能服务端就不提供下载接口了,那么模版就可以保存在前端项目中。

本文就是基记录如何实现纯前端下载静态资源文件。

本文目录

  • 一、实现原理
  • 二、适用场景
  • 三、具体实践
    • 1、编写方法
    • 2、调用
    • 3、注意事项

一、实现原理

主要使用a标签,通过动态创建一个包含 download 属性的 a 元素,触发点击事件实现。

在 html5 中,a 标签新增了 download 属性,包含该属性的链接被点击时,浏览器会以下载文件方式下载 href 属性上的链接。
例如:<a href="https://www.baidu.com" download="baidu.html">下载</a>

注意:利用a标签实现下载,会导致一个问题,当你下载图片的URL是远程图片url时,将不是下载该文件而是打开该文件。(本文主要演示获取本地资源然后下载,不涉及此中场景。)

二、适用场景

纯前端实现下载功能一般比较适合固定的文件,比如:excel/word/pdf 等固定模版,并不会和数据库有交互。

三、具体实践

1、编写方法

/*** 下载本地文件* @param {*} path 本地文件路径,注意:必须保存在public文件夹下* @param {*} name 下载后的文件名*/
const downloadLocalTemplate = (path, name) => {let a = document.createElement('a');a.href = path;  // 如果后端返回文件地址,path值就是后端返回的地址a.download = name; // 设置下载文件文件名,要完整的文件名+后缀,比如:test.xlsxa.style.display = 'none';document.body.appendChild(a);a.click();a.remove();
};

2、调用

downloadLocalTemplate('/static/test.xlsx','test.xlsx')downloadLocalTemplate('/static/test.pdf','test.pdf')

成功结果如下:
在这里插入图片描述

3、注意事项

  • downloadLocalTemplate方法的path参数路径问题:

    1)引用路径必须使用英文,防止打包引用地址错乱导致下载失败。

    2)关于文件的存放:

    如果vue项目有public文件夹,可以直接将文件放到该目录下,或者新建一个static文件夹,将资源存放在该目录下。引用路径为:'文件名''static/文件名'
    在这里插入图片描述
    如果vue项目没有public文件夹,但是有static文件夹,就将资源直接存放到static文件夹下,引用路径为:static/文件名
    在这里插入图片描述

3)第一个参数的文件路径写法:必须是/绝对路径,不能是./相对路径。

对于vue项目,如果是将文件放到public文件下就直接写文件名,如:'test.xlsx’。

如果有二级目录public/static就直接写地址,如:'static/test.xlsx'

同时注意⚠️ 如果vue.config.js中配置了publicPath,需要在下载的文件地址前面加上配置的路径前缀/,例如:'/static/test.xlsx'

4)总结不能正常下载可能的原因:

a. 文件路径错误;

b. 文件编码问题,比如用excel文件,但是下载保存成了pdf文件。

c. 浏览器兼容问题,比如不支持a标签的download属性。

例如:出现如下结果,提示:无法从网站上提取文件 大概率都是文件路径的问题。
在这里插入图片描述


http://www.mrgr.cn/p/88611178

相关文章

ARCGIS PRO3 三维模型OSGB转SLPK场景数据集

1.前言 因项目工作&#xff0c;需要将三维模型发布到arcgisserver上&#xff0c;但arcgisserver只支持slpk格式的模型&#xff0c;于是我开启了漫长的三维模型格式转换之旅&#xff0c;在这里记录下本人踩过的坑。 2.三维模型数据情况 2.1 模型大小&#xff1a;在20GB以上&a…

ant design pro vue项目搭建-运行项目

1、克隆代码git clone --depth=1 https://github.com/vueComponent/ant-design-vue-pro.git2、依赖安装npm install提示eslint版本报错去除eslint,将package.json 中eslint相关配置删除 3、重新安装依赖完成,没有报错npm install 4、启动项目npm run serve 提示webpack配…

如何将本地项目第一次同步到gitee远程

一,Gitee账号的注册/登录 在gitee登录入口输入相关信息进行注册登录https://gitee.com/signup#lang=zh-CN 二,本地安装git客户端并配置用户信息 1.Git - 安装 Git (git-scm.com)根据提示点击下一步,安装完成后,在本地文件夹右键单击出现git相关指令,表示安装成功2.点击git…

网络安全实训Day15

写在前面 电子垃圾&#xff0c;堂堂恢复连载。本来不想分天数梳理了&#xff0c;但是最后要写实训报告&#xff0c;报告里还要有实训日记记录每日学的东西&#xff0c;干脆发这里留个档&#xff0c;到时候写报告提供一个思路。 网络空间安全实训-渗透测试 渗透测试概述 定义 一…

ZooKeeper 搭建详细步骤之一(单机模式)

ZooKeeper 搭建详细步骤之三&#xff08;真集群&#xff09; ZooKeeper 搭建详细步骤之二&#xff08;伪集群模式&#xff09; ZooKeeper 搭建详细步骤之一&#xff08;单机模式&#xff09; ZooKeeper 及相关概念简介 搭建模式简述 ZooKeeper 的搭建模式包括单机模式、集群模…

antd 日期控件RangePicker如何增加快捷键(日/周/月/年)

注意&#xff1a;快捷键是从当前日期往前推算的 效果 代码 <script><RangePickerranges{{日: [moment(new Date().setDate(new Date().getDate() - 1)), moment(new Date())],周: [moment(new Date().setDate(new Date().getDate() - 7)), moment(new Date())],月: […

SpringCloud(微服务介绍,远程调用RestTemplate,注册中心Nacos,负载均衡Ribbon,环境隔离,进程和线程的区别)【详解】

目录 一、微服务介绍 1. 系统架构的演变 1 单体架构 2 分布式服务 3 微服务 2. SpringCloud介绍 SpringCloud简介 SpringCloud版本 3. 小结 二、远程调用RestTemplate【理解】 1. 服务拆分 1 服务拆分原则 2 服务拆分示例 1) 创建父工程 2) 准备用户服务 1. 用户…

对于寻找替代FTP服务器的银行来说,该如何选择合适的方案?

FTP服务器在银行内部可谓应用广泛,如银行内部跨部门、跨地区文件传输,银行与外部合作单位文件传输等,常见的大文件传输银行常用的方式多为FTP应用,但对于银行来说,FTP服务器的缺陷也非常明显,具体表现在: 1. 传输速度 首先,传输速度是影响文件传输效果的重要指标。 FT…

openGauss MOT高吞吐量

MOT高吞吐量 MOT高吞吐量测试结果如下。 Arm/鲲鹏2路128核性能 下图是华为Arm/鲲鹏2路128核服务器TPC-C基准测试的结果。 一共进行了四类测试:MOT和openGauss基于磁盘的表各进行了2次测试。 其中两项测试是在单节点(无高可用性)上执行,这意味着没有向备节点执行复制。其余两…

【STM32+HAL】读取电池电量

一、准备工作 有关CUBEMX的初始化配置&#xff0c;参见我的另一篇blog&#xff1a;【STM32HAL】CUBEMX初始化配置 有关定时器触发ADC模式配置&#xff0c;详见【STM32HAL】ADC采集波形实现 有关软件触发ADC模式配置&#xff0c;详见【STM32HAL】三轴按键PS2摇杆 二、所用工具…

Node.js -- 包管理工具

文章目录 1. 概念介绍2. npm2.1 npm 下载2.2 npm 初始化包2.3 npm 包(1) npm 搜索包(2) npm 下载安装包(3) require 导入npm 包的基本流程 2.4 开发依赖和生产依赖2.5 npm 全局安装(1) 修改windows 执行策略(2) 环境变量Path 2.6 安装包依赖2.7 安装指定版本的包2.8 删除依赖2.…

.net6 webapi 部署到IIS

一、发布.net6 webapi 项目 1.1 visual studio 2022右键发布到文件夹。 二、增加IIS容器 2.1 控制面板 2.2 启用或关闭Windows功能 3.3 勾选Internet Information Services,点击确定进行安装 三、部署webapi到IIS 3.1 安装 dotnet-hosting-6.0.29-win.exe 3.2 创建应用…

faiss简单测试方法

先把仓库克隆到本地,我这边还需要改cmake环境,在project上面加 set(CMAKE_CUDA_COMPILER /usr/local/cuda-11.8/bin/nvcc) 构建 mkdir buildcmake -B build . 编译,只需要编译faiss这部分就可以,(主目录下有很多测试代码,编译很慢,只编译faiss会快很多) cd build make …

35K*14 薪,入职了!这公司只要不裁员,我能一直呆下去!

大家好,我是R哥。 说说最近的面试辅导,有个学员进了某个知名互联网公司,拿到了 35K*14 薪的好成绩,有不少粉丝留言问我,现在行情这么差,他是怎么做到的? 这篇拿他这个案例完整回顾一下吧,我管他叫小Y吧。 背景沟通 说下小Y的基本情况吧:小Y工作 5 年+,空窗期2个月+,…

Apollo 7周年大会:百度智能驾驶的展望与未来

本心、输入输出、结果 文章目录 Apollo 7周年大会&#xff1a;百度智能驾驶的展望与未来前言百度集团副总裁、智能驾驶事业群组总裁王云鹏发言 直播回放大会相关内容先了解 Apollo&#xfeff;开放平台 9.0架构图 发布产品Apollo 定义自己对于智能化的认知百度集团副总裁 王云鹏…

摒弃FTP、邮箱和网闸,怎么实现安全域之间数据传输?

数据传输对企业的重要性不言而喻。它不仅是企业实现信息共享和协作的基础,还是企业做出更好决策、优化客户关系以及推动创新发展的关键所在。企业基于数据保护和网络安全的考虑,将内部网络划分为不同的安全域,此时,安全域之间数据传输就具有更特殊的重要性。 FTP:通过在内…

数据结构——二叉树的顺序存储(堆)(C++实现)

数据结构——二叉树的顺序存储&#xff08;堆&#xff09;&#xff08;C实现&#xff09; 二叉树可以顺序存储的前提堆的定义堆的分类大根堆小根堆 整体结构把握两种调整算法向上调整算法递归版本 非递归版本向下调整算法非递归版本 向上调整算法和向下调整算法的比较 我们接着…

Acrobat Pro DC 2021:强大的PDF编辑软件

Acrobat Pro DC 2021是Adobe公司推出的一款全面而强大的PDF编辑软件&#xff0c;凭借其卓越的性能和丰富的功能&#xff0c;成为了PDF编辑领域的领军者。 Acrobat Pro DC 2021中文激活版下载 这款软件具备全面的PDF编辑功能&#xff0c;包括文本编辑、图片处理、页面组织等&…

XMU《计算方法》实验三 龙贝格算法

实验三 龙贝格算法 实验报告 一、代码 clear; fun = inline(input(请输入函数:f(x) = , s)); a = input(请输入下界 a = ); b = input(请输入上界 b = ); e = input(请输入误差限 e = );h = b - a; k = 1; N = 1; T(1, 1) = h / 2 * (fun(a) + fun(b)); while truesum = 0;for…