HTML a链接下载文件之图片,文件,乱码等问题

我们在做需求的时候,经常会遇到下载文件

前端下载文件一般分为两种方式:

使用 a 链接进行下载:

<a herf="url" >下载</a>

向后端发送请求进行下载:

methods:{downloadReport(item,index){let date = item.plans[this.daysIndex[index]]let url = 'url'this.axios({method:'get',url:url,responseType:'blob',}).then((data) => {if (!data) {return}let url = window.URL.createObjectURL(data.data)let link = document.createElement('a')link.style.display = 'none'link.href = urllink.setAttribute('download', 'excel.xls')document.body.appendChild(link)link.click()})},
}

很多情况下我们使用 a 链接下载 文件时,对于.word、.xlsx等后缀的文件,通过点击 a 链接可以直接进行下载

<a herf="xxxx.xlsx">点击直接下载</a>

但是对于. jpg、.png等后缀的图片文件,点击超链接是进行的预览模式,这是因为如果你是下载浏览器无法解析的文件,例如.exe,.xlsx…那么浏览器也会自动下载,但是如果你使用浏览器可以解析的文件,比如.txt,.png…浏览器就会采取预览模式,所以无论如何你都无法直接弹出下载框。

<a herf="xxxx.jpg">点击直接下载</a>

这时候如果我们不进行特殊设置,他会直接在本页面打开图片,体验度不是很好,所以我们需要设置target="_blank"属性,使其新建窗口打开,然后手动下载

<ahref={`${HttpProps.IMG_ROOT}/${item.url}`}// 超链接 target="_blank" 要增加 rel="nofollow noopener noreferrer" 来堵住钓鱼安全漏洞。如果你在链接上使用 target="_blank"属性,并且不加上rel="noopener"属性,那么你就让用户暴露在一个非常简单的钓鱼攻击之下。rel="noopener noreferrer"target="_blank"
>点击预览
</a>

所以我们需要一个函数来帮我们判断文件类型

function judgeUrlIsImage(url) {if (/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(url)) {return true}return false
}

综上所述:使用a链接下载文件的代码大致为(以react为例):

js:
const judgeUrlIsImage = (url) => {if (/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(url)) {return true}return false
}
html:
const urlInfo = {name: "2020年岗位工作目标评估表_样例.xlsx"size: 214962status: "done"type: "image/png"url: "url.xlsx"
}
render() {return (judgeUrlIsImage(urlInfo.url) ? (<a herf={urlInfo.url} rel="noopener noreferrer" target="_blank">{urlInfo.name}</a>) : (<a herf={urlInfo.url}>{urlInfo.name}</a>))
}

细心的人会发现,我们下载下来的文件名可能会是 乱码
在这里插入图片描述
虽然我们上传的时候选择的文件名是我们自己设置的
在这里插入图片描述
但是我们上传到阿里云的时候,后段为了保证每个人上传的文件做区分,可能大家上传的文件名相同,所以生成了随机码做为文件的名字,其实我们下载下来的真正名字取决于它
在这里插入图片描述
很好,W3school也为我们提供了downLoad去控制下载文件的名称属性
在这里插入图片描述
你以为这就行了吗

no no no
在这里插入图片描述
只有 火狐 和 谷歌 才支持这个属性

结果你在 a 标签上设置了download 属性,结果发现在 谷歌 或 火狐 下载下来的文件名还是乱码

<a herf={urlInfo.url} download={urlInfo.name}>{urlInfo.name}</a>

在这里插入图片描述

这是因为 href属性的地址必须是和你前端js非跨域的地址,如果引用的是第三方的网站或者说是前后端分离的项目,调用后台的接口,这时download就会不起作用

如果我们使用本地相对路径的地址它则会起作用

<a href="/images/a.exe" download="b">点击下载</a>

所以,如果你想要 自定义下载文件名或者直接下载图片,可以和后端约定 要么上传图片的时候就存入中文名,要么让后端做下载操作,然后给你提供接口,你去请求就👌啦。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冗余云计算连接:保持组织运行

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 在过去的几个月中&#xff0c;人们目睹了组织将其劳动力转移到“在家工作”模式和远程操作的情况。微软公司报告其云计算服务…

杭州湾跨海大桥视频上云,夯实智慧高速“云基建

现阶段&#xff0c;高速公路监控设备覆盖已经有普遍提高&#xff0c;但监控设施的覆盖仅完成了视频的监控功能&#xff0c;没有实现分析提醒功能。传统人工巡检方式工作量大且容易发生事件遗漏、事故发现不及时导致二次事故、人工视频巡检工作量大无法做到实时检测、监控中心绝…

移动端一键登录注册

文章目录1. 用户名密码一键注册登录流程2. 手机号一键注册登录流程1. 用户名密码一键注册登录流程 2. 手机号一键注册登录流程

使用html2Canvas将页面转化为canvas图片,最后长按保存到本地,史上最全 html2canvas 使用 踏坑之旅,没有之一

最近工作中遇到一个需求&#xff0c;类似这样 点击商品二维码&#xff0c;生成一张带有商品图片、标题、描述、二维码等信息的图片&#xff0c;用户长按进行保存。 在使用html2canvas进行项目开发的时候&#xff0c;遇到很多的问题&#xff0c;主要为一下方面&#xff1a; 1、…

饿了么4年+阿里2年:研发路上的一些总结与思考

我是在2014年入职饿了么&#xff0c;从前端和PHP一直做到后端架构和团队&#xff0c;从2014年到2017年陆续负责过公司客服、销售、代理商、支付、清结算、订单这些业务的产研与团队&#xff1b;2018年从业务研发团队抽身&#xff0c;6个人组起一个小组投身机器学习&#xff0c;…

到底谁在使用低代码?钉钉低代码用户画像:非IT人员占8成

编辑 | 宋慧 供稿 | 钉钉 头图 | 付费下载于视觉中国 低代码开发需求到底有多大&#xff1f;谁在使用低代码开发&#xff1f;3月2日&#xff0c;钉钉发布低代码开发者画像&#xff1a;一二线城市的80、90后是低代码开发的主力军&#xff0c;但20岁以下和50岁以上开发者也占比近…

都已经十岁的ApacheDubbo,还能再乘风破浪吗?

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 纵观中国开源历史&#xff0c;你真的没法找到第二个像 Dubbo 一样自带争议和讨论热度的开源项目。 一方面&#xff0c;2011 …

前后端分离,如何解决跨域(代理模式)、路由拦截(进入页面需要登录)以及请求拦截(登录TOKEN失效)等问题(初学者)

前端时间项目需要发布一个较大的版本&#xff0c;工作比较忙&#xff0c;加了好多个晚上的班&#xff0c;感觉自己有点缺氧了。最近稍微闲下来了&#xff0c;顺便调休了三天&#xff0c;刚刚给家里来了个大扫除&#xff0c;看着这干干净净的小家&#xff0c;心里顿时舒服了很多…

秒懂云通信:通信圈黑话大盘点

原文链接 本文为云栖社区原创内容&#xff0c;未经允许不得转载。

从开源视角分析,搞定边缘计算云原生方案选型

作者 | lanliang来源 | 边缘计算社区头图 | 下载于视觉中国随着Kubernetes已经成为容器编排和调度的事实标准&#xff0c;各大公有云厂商都已经基于Kubernetes提供了完善的Kubernetes云上托管服务。同时也看到越来越多的企业、行业开始在生产中使用Kubernetes, 拥抱云原生。在各…

不太平凡的2020、平凡的我

这是去年12月31号的年终总结立下的flag。 古人常说&#xff1a;千里马常有&#xff0c;而伯乐不常有。 如今都是&#xff1a;flag常有&#xff0c;而实现不常有。2020年6月&#xff0c;在疫情的笼罩着&#xff0c;我们这一届 应届生 在无声无息中就成为了 毕业生。因为2019年7…

银行业数据治理之数据资产管理

前言&#xff1a; -更多关于数智化转型、数据中台内容请加入阿里云数据中台交流群—数智俱乐部 &#xff08;文末扫描二维码或点此加入&#xff09; -阿里云数据中台官网 https://dp.alibaba.com/index 随着2018年银保监发文《银行业金融机构数据治理指引》&#xff0c;各银监局…

架构简洁之道:从阿里开源应用架构COLA说起

导读&#xff1a;COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足&#xff0c;因此给 COLA 做了一次“升级”&#xff0c;在这次升级中&#xff0c;没有增加任何新的功…

html、css、js、react、vue 文字一行一行显示出来

前端时间在做 年报&#xff0c;就不难涉及到 年报 具有的几大特性&#xff1a; 1、页面滑动特效 2、文字一行一行出现特效 3、页面内动画 等等 这片文章主要展示一下 文字一行一行出现特效 代码&#xff08;react 为例&#xff09; 先看效果图&#xff1a; 第一步&#xff…

哪家互联网公司涨薪最厉害?居然不是阿里腾讯

最近脉脉职言区有一条讨论火了&#xff1a;哪家互联网公司涨薪最厉害&#xff1f;按照拼多多员工的说法&#xff0c;应届毕业生可以拿比腾讯阿里高30%的薪资&#xff0c;而有工作经验的员工普遍薪资水平也高出业内30%~50%以上。而且在去年由于疫情众多企业降薪、甚至裁员的状况…

MongoDB 安装与配置~linux

文章目录一、 安装建议二、 安装步骤2.1. 下载2.2. 解压缩2.3. 重命名2.4. 配置环境变量2.5. 使其生效2.6. 配置MongoDB2.7. 启动MongoDB2.8. 网络安全组一、 安装建议 MongoDB 可以在mac/win/linux上安装&#xff0c;我个人建议在linux上安装会更好&#xff0c;这样测试起来更…

节省服务器成本50%以上!独角兽完美日记电商系统容器化改造实践

完美日记创立于2017年&#xff0c;这家公司上线不到两年即成为天猫彩妆销冠&#xff0c;2019年成为11年来第一个登上天猫双十一彩妆榜首的国货品牌&#xff0c;包揽天猫2019全年彩妆销冠&#xff1b;2020年4月成为首个亮相天猫超级品牌日的国货彩妆品牌&#xff0c;同时勇破彩妆…

浏览器从输入URL到页面渲染过程 —— 浏览器的进程与线程

之前我有总结过一篇经典面试题&#xff1a;浏览器从输入URL到页面渲染过程&#xff0c;接下里我将对某些知识点进行更细致的解析。 浏览器从输入URL到页面渲染过程 系列文章&#xff1a; &#xff08;二&#xff09;&#xff1a;浏览器从输入URL到页面渲染过程 ——页面渲染流…

MongoDB 的可视化管理工具~连接腾讯云MongoDB服务

不论是mysql或者redis或者es&#xff0c;我们都会使用远程的客户端工具来连接数据库server&#xff0c;那么目前的linux上锁安装的MongoDB就是server端&#xff0c;我们需要有一个客户端来进行可视化的管理&#xff0c;常用的可以使用Navcat来操作&#xff0c;当然使用其他的GU…

云原生时代业务架构的变革:从单体迈向Serverless

如今&#xff0c;各行各业都在谈数字化转型&#xff0c;尤其是新零售、传媒、交通等行业。数字化的商业形态已经成为主流&#xff0c;逐渐替代了传统的商业形态。在另外一些行业里&#xff08;如工业制造&#xff09;&#xff0c;虽然企业的商业形态并非以数字化的形式表现&…