![HTML并不简单:Web前端开发精进秘籍](https://wfqqreader-1252317822.image.myqcloud.com/cover/685/51089685/b_51089685.jpg)
2.1.3 实用的download属性
Web网页中有如下一段HTML代码,请问点击“案例图片”字样的链接后会有什么效果?
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_28_1.jpg?sign=1739026621-ZkH6N9bGcJuR5Fn1KhyOHpfoB5dBfKrL-0-1710bbceee0c68fb616a3ed42a0eca60)
没错,会在新窗口打开一个图片并预览。
如果希望点击这个链接的行为不是预览图片,而是下载图片,该如何实现?
有人会想到使用FileSaver.js(业界知名客户端资源下载解决方案),此方法确实可以满足需求,却不是最佳实现方法。
其实,浏览器内置了对应的能力,那就是<a>元素专属的download属性,无须使用JavaScript即可实现图片资源的一键下载。
比如可以这样:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_28_2.jpg?sign=1739026621-h5mbBZrFTiD8IpES7OPNS73zOcXj8JB3-0-38f83f0035693131caf46f081000b039)
如果希望指定下载的图片名称,可以这样:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_28_3.jpg?sign=1739026621-2WHInDqgOXG39nMHXMrgtKpgvdctLptb-0-fad4183869cd1e50b22b636d9923ef0d)
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_28_4.jpg?sign=1739026621-UDNdpVt2hDmysE6S2TvwkaU9QouugFi4-0-1eba4f08139b7082b2e6e544d9b6f712)
可以通过在浏览器中输入地址https://www.htmlapi.cn/2/1-5.html或扫码访问来体验上述效果。
需要注意的是,download属性并不是万能的,如果链接的资源跨域了,则无法触发下载,除非浏览器无法打开这个链接资源,在这种情况下,无论是否设置了download属性,都会触发下载行为。例如:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_28_5.jpg?sign=1739026621-dHp9uc7fDvyYAQlcfnau8Dm39JdC1Hwp-0-7cfc25b64417cf236937a4bab0bb4148)
此时,点击“案例图片”字样的链接会直接下载example.zip文件,因为浏览器无法解析MIME Type是application/zip的文件。
于是就有人想利用此特性触发某些跨域文件的下载,例如:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_28_6.jpg?sign=1739026621-FAGDAltio9KA46yAUw4E3hSx81WF8chl-0-6cde3640c95ded9082f43c754d635c0b)
在现代Web开发中,页面模板资源和静态资源都是分离的,属于不同的域名,也就是虽然资源跨域,但是配置的权限还在自己手中,所以就有人通过服务器配置,让PDF文件的header(头信息)中的Content-Type值是某个浏览器不认识的MIME Type类型的,而触发下载。
虽然也能达到效果,但感觉像在耍小聪明,其实更好的做法是配置Content-Disposition的值为attachment,Content-Type和原始文件保持一致即可。例如,在PHP语言中:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_29_1.jpg?sign=1739026621-iH4zEwhm1Nz1QPLKGnHX8CZxPLg5P2pJ-0-d7bd5ac4dcd2fde043af859a0b0520a6)
由于相关内容与本书关联不大,因此不做进一步展开。