Download in HTML

HTML

在 Web 中,如果希望点击一个链接可以进行下载的操作,有以下两种方案可供参考:

后端的解决方案

后端在返回 Response Header 的时候,可以通过指定 Content-Disposition 的值,来改变浏览器默认对链接的行为,从而达到让浏览器直接下载某一个资源的目的。这里,Content-Disposition 的第一个参数有两种值可写:inlineattachment。其中,inline 是默认的值,表示响应中的消息体会以页面的形式展示,而 attachment 则会将这个行为改成下载到本地。

设置成 attachment 之后,还可以进一步通过配置 filename 来指定下载文件的文件名。例子如下:

Content-Disposition: attachment; filename="example.jpg"

如此设置之后,前端在访问到这个 URL 的时候,浏览器就会以 example.jpg 为文件名下载当前的资源了。

更多相关的介绍可以参考这篇文章

前端的解决方案

除了后端的解决方案之外,前端也可以通过指定 a 标签中的 download 字段来下载文件。对于使用了 download 字段的 a 标签,点击后的默认行为将会有跳转浏览改成文件下载。download 属性可以跟一个文件名作为值,浏览器会将这个值作为下载文件的文件名来使用。

当然,前端的方案相对来说会有更多的限制,主要是以下几点:

  1. 文件必须是同域的,对于跨域的资源,download 并不会直接触发下载功能,行为上会和在新窗口打开资源一致;
  2. 如果后端在 Content-Disposition 指定了不同的文件名,那么会以后端指定的结果为准
  3. 如果后端 Content-Disposition 设置为 inline,不同的浏览器会有不同的行为:Firefox 会按 Content-Disposition 的结果来执行;Chrome 则会按 download 字段的设置来执行

更多细节可以参考 MDN 文档的相关部分。