在实际项目中,我们通常会遇到这么一个需求:后端给前端返回一个任意文件类型的完整的url路径,前端拿到这个路径直接通过浏览器下载文件到本地。我想大家应该都会首先想到使用HTML中的标签,,因为标签中提供download属性,使得流量拿起将链接url视为下载资源。
然后我想记录此篇文章的主要原因是,在使用标签下载文件时,由于浏览器默认行为,对于一些特殊格式的文件比如:txt,png,jpg等文件这些浏览器支持直接打开的文件是不会执行下载任务的,而是会直接打开文件。因此,本文主要先讲一下下载文件的用法,后面也会给出对于特殊文件时浏览器直接打开的解决方式。
元素(或称锚元素),可以通过它的href属性创建通向其他网页、文件、电子邮件地址、同一页面内的位置或者其他URL的超链接
导致浏览器将链接URL视为下载资源。可以使用或不适用filename值:
超链接所指向的URL。链接不限于基于HTTP的URL------它们可以使用浏览器支持任何URL的协议:
tel:
URL 链接到一个电话号码mailto:
URL 链接到一个邮箱地址该属性指定在何处显示链接URL,作为浏览器上下文的名称(标签、窗口或者
我在这里主要介绍几个我常用到的属性,但是还有很多其他属性,感兴趣的话可以在这里进行详细的了解:锚元素 - HTML(超文本标记语言) | MDN
然后我又找到如下可以有效解决该问题的方式:
chrome浏览器对与txt,json等文件直接打开应该是浏览器对这些类型的文件支持预览,可以设置Content-type:application/octet-stream来解决此问题,即告诉浏览器这是一个字节流,浏览器处理字节流的默认方式是下载,以下是我需要使用到的一些文件格式,并对其进行处理,还有很多其他文件格式,拼接的类型 会有所差别,可以详细查看这份:如何设置Content-Type(MIME)_对象存储 OSS-阿里云帮助中心
可以参开这个博主这篇文章:使用a标签下载文件,浏览器会直接打开解决方案_a标签下载图片会打开-CSDN博客