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

9 篇文章 2 订阅
订阅专栏

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

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

使用 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 = url
		 link.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"属性,使其新建窗口打开,然后手动下载

<a
   href={`${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: 214962
	status: "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>

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

在这里插入图片描述

a链接下载文件或者点击按钮自动下载
a88480的博客
07-05 2861
downloadfile
a标签创建下载链接
weixin_43073401的博客
06-05 9905
(1) HTML a 标签的 download 属性 - w3school 在线教程. https://www.w3school.com.cn/tags/att_a_download.asp.(3) HTML a标签链接 设置点击下载文件 - CSDN博客. https://blog.csdn.net/Gabriel_wei/article/details/105613874.
前端 a链接 如何实现下载功能
最新发布
胡西风的博客
05-07 149
在中后台项目中,前端难免需要处理下载的逻辑,需要下载的内容包括但不限于图片、Excel 表格、CSV 文件、MP4 文件、PDF 文件、TXT 文件JSON文件HTML 文件等等。虽然下载的内容各式各样,但是下载的原理大同小异。下面来一起学习一下前端是如何处理下载的。URL.createObjectURL(blob) 可以直接访问,无需 “编码 / 解码”,但需要记得撤销(revoke);而 Data URL 无需撤销(revoke)任何操作,但对大的 Blob 进行编码时,性能和内存会有损耗。
a 标签链接 设置点击下载文件
XTP1138972631的博客
11-10 2288
a 标签链接 下载文件
前端开发中接收“图片乱码”的处理:
m0_61452987的博客
06-27 1641
前端处理后台返回的图片控制台输出是乱码
<a>链接下载视频/图, 不是打开新页面预览
huanglei201502的博客
09-29 1567
下载视频,图片无需打开
html 中文乱码 HTML链接中文乱码问题分析及解决方法
09-28
Vm中一个超链接URL需要拼接中文作为Get请求的参数如果直接拼接,传到后台Action的参数对象中后取出会是乱码,需要编码后再拼接到URL上,接下来将和大家分享一下解决方法
关于zend studio 出现乱码问题的总结
12-18
出现乱码的地方大概有4个地方:1、文件的编码方式(就是你新建文件的编码),这一点需要设置编辑器的编码方式。2、页面没有指定浏览器编码的显示方式,这一点解决的办法是:1,如果页面是.html需要设置<meta ...
Teleport Ultra 网页文件名乱码修复助手
03-08
1.软件仅对Teleport Ultra 软件 下载网页中 “XX.html” 网页文件名中 “XX” 的乱码进行修复,此处XX为中文字符; 2.软件需要在WIN7及以上系统使用; 3.软件运行依托 .NET 4.5.1; 4.软件仅供技术交流使用,并未...
JSP对URL链接中的中文乱码处理方法总结.docx
01-20
这种方法是通过在 Tomcat 服务器的 server.xml 文件中设置 URI 编码来避免中文乱码问题。例如: 解决 JSP 对 URL 链接中的中文乱码问题需要考虑到浏览器、服务器和编码方式的差异,选择合适的方法来避免中文乱码...
nyfedit7.0(mybase)-chm制作去乱码插件
01-28
mybase7.0是非常好用的笔记制作软件,可以生成chm. 但是可能会出现乱码。这里是由我改写的chm制作脚本。上传到安装目录的\plugins目录下后,重启mybase, ...其次修改了chm中的链接的打开方式,使之在外部浏览器中打开。
以a链接进行下载文件
weixin_44795287的博客
05-31 267
const function exportFile(blobData,fileName){ const link = document.createElement('a') const blob = new Blob([blobData],{type:blobData.type}) link.href = URL.createObjectURL(blob) link.setAttribute('download',fileName) document.body.appendChild(link)
HTML里的a链接download 属性浏览器js点击下载图片
hangGe0111的博客
06-19 6707
1.&lt;a&gt;download下载图片具有兼容性所以需做兼容处理,使其兼容IE,就比较完美了。2.最近有这方面的需求,从网上看了一些资料,拿过来不能直接使用,把他们整合了一下,作为笔记,方便自己以后使用,现在IE,Firefox,Chrome都可以用了。3.代码如下:(1)HTML部分&lt;div id="down"&gt;  &lt;a id="downLoad"&gt;Click M...
a标签下载图片js执行下载图片
热门推荐
xiaoqiangbigbrother的博客
07-28 2万+
原因: 我发现href的值是网络地址就是添加了download属性还是会直接打开图片而不是直接下载,只有写成相对地址添加了download属性才会执行下载,但是存在兼容性问题 如下: &lt;a href="https://www.iamyun.net/eastcomlab/surprisestatic/1524548025839250.png" download&gt;&lt;span&g...
最详细的前端二进制数据流
weixin_46721670的博客
11-23 6404
slice:slice 方法用来对 Blob 对象进行切割,他会返回一个新的 Blob 对象,通常在上传大数据时需要用到。stream:返回一个能够读取 Blob 中内容的。
前端文件流转成图片格式显示
lwg112233的博客
12-22 3436
来看一下文件流呵~~原来长这样,我们处理也就很简单,大概4步, 1.在方法中添加responseType:'arraybuffer' export function downloadFile(query) { return fetch({ url: '/apiv2/websiteadmin-service/files/downloadFile', method: 'get', params: query, respo...
js动态创建a标签,模拟点击下载文件;通过动态创建iframe下载文件
u011511086的专栏
03-30 1979
方式一:js动态创建a标签js模拟点击下载文件 var a = document.createElement('a'); a.href = "www.baiduggx.com/123.jpg"; a.id = "img0091"; a.download = "123.jpg"; a.style = "display:none"; document.body.appendChild(a); document.getElementById("img0091").click();
前端文件类型以及a标签下载文件
weixin_41422591的博客
06-16 1080
我们开发的时候总会需要知道文件类型来做过滤文件,在上传之前判断文件类型。或者将文件使用a标签下载的时候。下面举个栗子,我们得到文件流转成对应的文件类型使用a标签下载
a标签的download属性实现静态文件图片下载
qq_45021462的博客
04-06 5073
前端使用a标签的download属性实现静态文件图片下载 需要知道的是,如果下载的是浏览器不能识别的(例如:.exe,.zip,.doc等)内容,浏览器会直接进行下载,但是如果下载的是浏览器可以识别的(例如:.png,.jpg等)内容,浏览器不会进行下载,而是进行打开预览。 下载内容为不能识别 1.1 直接使用download属性,属性值为下载文件的名字。 <a href="./企业综合信息系统插件的副本.zip" download="xxx.zip" >压缩包下载</a> &
如何解决 css 文件乱码问题
09-11
### 回答1: 非常感谢您的提问。不过,我需要先说明一下,作为一名 AI 语言模型,我并不能代表 CSDN、OpenAI 或者任何组织机构或个人,我只是一台能够提供语言输出的工具。 关于您的问题,CSS 文件编码问题可能会导致乱码的情况发生,可以尝试以下几种方法来解决: 1. 确认编码方式:确认 CSS 文件编码方式是否正确。常见的编码方式有 UTF-8、GBK、GB2312 等。可以通过编辑器或者转码工具来查看和修改编码方式。 2. 转码方式:将 CSS 文件的编码方式转换成正确的编码方式。例如,使用 Notepad++ 或者 Sublime Text 等编辑器,选择“转换为 UTF-8(无 BOM)”等选项进行转换。 3. 编辑器设置:在编辑器的设置中,将编码方式设置为正确的编码方式,确保保存时使用正确的编码方式。 希望这些方法能够帮助到您解决问题。如果还有其他问题,欢迎继续提问。 ### 回答2: 解决CSS文件乱码问题可以采用以下几种方法: 1. 在CSS文件的头部添加字符编码声明:可以在CSS文件的开头加入如下代码: ```css @charset "UTF-8"; ``` 这样可以明确指定CSS文件采用UTF-8编码,确保文件正常显示。 2. 检查服务器端配置:在服务器端,检查是否正确设置响应头的Content-type属性为text/css;charset=utf-8。这可以确保CSS文件以正确的编码形式被浏览器解析。 3. 检查HTML文档的字符编码声明:在HTML文档的头部,使用<meta>标签来指定字符编码,确保与CSS文件编码一致。例如: ```html <meta charset="UTF-8"> ``` 4. 使用转义字符:如果在CSS文件中有特殊字符或非ASCII字符,可以使用Unicode转义字符来替代。例如,使用`\u5b57`来表示一个Unicode字符。 5. 使用编码工具将CSS文件转换为正确编码:有时候,CSS文件可能被保存为错误的编码形式,可以使用文本编辑工具或在线编码转换工具将文件转换为正确的编码形式。 最后,记得保存并重新加载CSS文件,并清除浏览器缓存,刷新页面来查看是否解决了CSS文件乱码问题。 ### 回答3: 要解决CSS文件乱码问题,可以采取以下几种方法: 1. 确保CSS文件编码正确:将CSS文件的编码格式设置为UTF-8。可以使用文本编辑器或IDE打开CSS文件,然后另存为UTF-8编码格式。 2. 在HTML文档中正确地引用CSS文件:确保在HTML文档的head部分使用正确的链接标签引用CSS文件。例如:<link rel="stylesheet" href="style.css" type="text/css"> 3. 在CSS文件使用正确的字符集声明:在样式表的开头使用@charset规则,指定字符集为UTF-8。例如:@charset "UTF-8"; 4. 确保服务器响应头正确设置:在服务器响应头中添加Content-Type标头,并使用正确的字符集。例如:Content-Type: text/css; charset=UTF-8。 5. 检查CSS文件是否包含非法字符:有时在CSS文件中可能会包含非法字符,可以通过删除或替换这些字符来解决乱码问题。 6. 使用CSS预处理器:使用CSS预处理器(例如Sass、Less等)可以简化CSS编写,同时自动处理编码问题。 7. 使用网页开发工具调试:使用网页开发工具(如Chrome开发者工具)来检查CSS文件的编码以及在加载过程中是否有错误。 请根据具体情况选择适合的方法来解决CSS文件乱码问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 解决谷歌浏览器 google chrome 安装插件报错:Download interrupted,不支持 .crx 文件下载 40652
  • ESLint is disabled since its execution has not been approved or denied yet 26086
  • 把字符串按照某几个字符切割成数组 25564
  • H5 中 IOS 系统如何获取浏览器真正的内核 8483
  • html、css、js、react、vue 文字一行一行显示出来 7914

分类专栏

  • 小功能 3篇
  • 踩坑道路 9篇
  • 程序人生 4篇
  • 计算机网络篇 6篇
  • 笔记 6篇
  • 框架 6篇

最新评论

  • 解决谷歌浏览器 google chrome 安装插件报错:Download interrupted,不支持 .crx 文件下载

    吃橘子的猫﹒: 我换了US的节点解决了

  • 把字符串按照某几个字符切割成数组

    鹤汀浮渚。: 先把object 的 value全部取出来,再放入labels里

  • 把字符串按照某几个字符切割成数组

    m0_61819120: 您好 如果labels这里每项元素想用对象的value值 应该怎么修改呢

  • vue3中 使用 swiper 插件,自定义切换按钮, 将 前进后退 、左右切换 按钮放到容器外部

    好久不见的小浴花: 感恩的心感谢有你表情包

  • Vue3 安装axios使用报错:Uncaught TypeError: Cannot read property ‘use‘ of undefined

    苏黎世的民谣: 感谢大牛!如果有小伙伴遇到页面加载不出来的情况,可以试试把 main.js 中的 app.use(axios) 放在最后

大家在看

  • Mybatis和Hibernate的作用区别及底层原理分析
  • 马科维茨模型下的投资组合优化:编程实现与实践问题 959
  • Lsky Pro搭建配置Minio存储策略(本地实现) 360
  • 工厂设备日志采集工具 201
  • CS2游戏无法启动?一键修复DLL缺失问题

最新文章

  • SVG图片以 https 链接的方式展示在页面上,并且可继承父类的颜色大小(类似阿里巴巴iconfont)
  • H5 中 IOS 系统如何获取浏览器真正的内核
  • 解决谷歌浏览器 google chrome 安装插件报错:Download interrupted,不支持 .crx 文件下载
2022年2篇
2021年11篇
2020年14篇
2019年6篇
2018年2篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

两个鬼故事年属猴的怎么起名极光tv有一个地方只有我们知道现货投资史姓女孩起名洋气的名字他的小草莓精变用爸妈的名字给孩子起名袁隆平是什么院的院士潘氏姑娘起名勾魂尤物绝世武魂洛城东牛宝宝起名字大全过来我亲亲蚂蚁帝国宝宝起名大全,在线起名产品起名怎么起高跟鞋视频怀了阎王的崽后我跑了ps1游戏下载起个笔名许冠英电影新生儿起名字大全男孩操作系统起名姓庄女孩宝宝起名杨姓孩子起名大全麦玲玲起名讲究udietoo修改器曹冲称象文言文按摩师刘成刘雪小说免费少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化