通常,将文件绝对路径url作为超链接<a>的链接地址href的值,点击<a>后,浏览器将会尝试请求文件资源,如果浏览器能够辨认文件类型,则将会以预设的打开方式直接打开下载的文件。(关于预设的文件打开方式,windows -> 控制面板 -> Internet属性 -> 程序 -> 设置程序 -> 将文件类型或协议与程序关联)

  不过,这里有一个弊端,通常,文件如果没有默认的打开文件方式,将会被标注为未知应用程序,不过如果你设置了该文件的打开方式一次之后,浏览器请求了该资源就将以这种方式打开,而且你不能再将期设置回“未知应用程序”的类型,这样将会导致你通过访问<a>来下载这个文件成为泡影。

  那么,正确的将<a>作为下载文件链接的方式是什么呢?

  还是需要从后台服务器返回的文件类型想办法。

  在这里,我们只需要在前端请求后端文件流时,将返回的response头的“content-type”值设置为“application/x-msdownload; charset=utf-8”。这样浏览器将会将文件流当作下载动作而打开文件默认的下载文件框。

  在现在的大部分现代浏览器里面,直接这么设置就可以了,不过在一些比较老旧的浏览器中,可能还需要设置response头的"Content-Disposition"值为"attachment; filename=",这里跟上文件的名称并进行utf-8编码转换。 不过,现在使用的大部分浏览器,并不需要这样显式的设置utf-8编码了。

 

posted on 2016-10-24 10:21  linxiong  阅读(9397)  评论(0编辑  收藏  举报