Manjushaka / blog

3 stars 0 forks source link

浏览器下载问题content-disposition #9

Open Manjushaka opened 7 years ago

Manjushaka commented 7 years ago

服务器端可以设置响应头部,响应头部中有一个字段content-disposition,这个字段可以设置浏览器对文件的处理方式,支持两个值: inline:表示浏览器中内嵌显示。 attachment:表示下载文件。 还可以设置文件名。如content-disposition: inline; filename=woshiwenjianming.pdf 但是当服务器端设置content-type: application/octet-stream时,不管content-disposition设置成什么,都会下载文件。因为 application/octet-stream表示该文件是个二进制流,不是可以内嵌显示的类型。要想让content-disposition的设置生效,文件必须是可内嵌显示的类型,如" image/jpeg "等。 content-disposition是MIME协议的扩展,MIME协议指示MIME用户代理如何显示附加的文件。服务端向客户端发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等。如果需要提示用户保存,就要利用content-disposition加上attachment。 而且要注意,确保没有禁止浏览器缓存,如:

response.setHeader("Pragma", "No-cache");  
response.setHeader("Cache-Control", "No-cache");  
response.setDateHeader("Expires", 0);

否则的话,IE下依旧不支持下载文件,其他浏览器可以下载。(这点有待商榷,rrp里设了no-cache,但是IE依旧可以下载)

HTTP content-type 或是MIME-type 与文件扩展名的对应关系