文章目录
- 1. response.setContentType() :
- 1.1 概述:
- 1.2 常用方法:
- 2. Content-Disposition:
- 2.1 概述
- 2.2 示例:
1. response.setContentType() :
1.1 概述:
内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。
1.2 常用方法:
response.setContentType("text/html"); // the most popular one
response.setContentType("text/plain");
response.setContentType("text/css"); // Cascading Style Sheet
response.setContentType("application/html");
response.setContentType("image/gif");
response.setContentType("application/zip");
response.setContentType("application/pdf");
//当浏览器在请求资源时,会通过http返回头中的content-type决定如何显示/处理将要加载的数据,如果这个类型浏览器能够支持阅览,浏览器就会直接展示该资源,比如png、jpeg、video等格式。在某些下载文件的场景中,服务端可能会返回文件流,并在返回头中带上Content-Type:application/octet-stream,告知浏览器这是一个字节流,浏览器处理字节流的默认方式就是下载。
Application/octet-stream是应用程序文件的默认值。意思是未知的应用程序文件,浏览器一般不会自动执行或询问执行。浏览器会像对待,设置了HTTP头Content-Disposition值为attachment的文件一样来对待这类文件,即浏览器会触发下载行为。
sponse.setContentType("application/octet-stream");
2. Content-Disposition:
2.1 概述
是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件,该响应头指示回复的内容该以何种形式展示,是以内联的形式(即网页或者网页的一部分),还是以附件的形式下载并保存到本地
当Internet Explorer接收到头时,他会激活文件下载对话框,它的文件名框自动填充headers指定的文件名。
服务器向浏览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等。如果需要提示用户保存,就要利用Content-Disposition进行处理,(敲黑板,划重点)关键在于一定要加上attachment [附件] 。
例如:
Response.AppendHeader("ContentDisposition","attachment;filename=FileName.txt");
这样的话,浏览器在打开的时候回提示保存还是打开,即使选择打开,也会使用相关联的程序,比如记事本打开,而不是IE直接打开。
Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名。
具体的定义如下:
//content-disposition的定义
content-disposition ="Content-Disposition" ":"
disposition-type
*(";" disposition-param)
//disposition-type的定义
disposition-type="attachment"|disp-extension-token
//disposition-param的定义
disposition-param=filename-param|disp-extension-parm
//filename-param的定义
filename-param= "filename" "=" quoted-string
//disp-extension-token的定义
disp-extension-token = token
//disp-extension-parm
token "=" ( token | quoted-string )
常用形式:
Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"
2.2 示例:
fileName = URLEncoder.encode("导入模版.xlsx","utf-8");
response.setHeader("Content-disposition","attachment; filename="+fileName);
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
注意点:
当然filename参数可以包含路径信息,但User-Agnet会忽略这些信息,只会把路径信息的最后一部分作为文件名。当响应类型为application/octet-stream情况下使用上面的头信息的话,那么就不能直接显示内容,而是弹出一个"文件下载"的对话框,接下来就是用户决定“打开”还是“保存”了。