该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型。
Example :当Content-Type 的值设置为text/html和text/plain时,前者会让浏览器把接收到的实体内容以HTML格式解析,后者会让浏览器以普通文本解析.
当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
Content-Disposition扩展头的 栗子:
One.
public String saveAs() {
String fileName = this.fileFileName;
String fileType = this.fileContentType;
System.out.println(fileName);
//页面响应数据类型设置为image/png
resp.setContentType(fileType);
//响应头设置为Content-Disposition, 作用 : 向浏览器响应数据文件的名字和类型
//响应头字段设置了attachment 执行方法将弹出下载对话框
resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
String realpath = this.getRealpath(urlInv + "/" + fileName);
/**
* 通过copyFile直接将文件读取后写出,在页面打开
*/
try {
FileUtils.copyFile(new File(realpath), resp.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Two.
/**
* 页面直接打开图片
* @return
*/
public String openAs() {
String fileName = (String) session.getAttribute("fileName");
System.out.println(fileName);
String fileType = (String) session.getAttribute("fileType");
//响应头用于请求
// req.getHeader(arg0)
//页面响应数据类型设置为image/png
resp.setContentType(fileType);
//响应头设置为Content-Disposition, 作用 : 向浏览器响应数据文件的名字和类型
//响应头字段没有设置attachment 执行方法将直接将文件展示在页面
resp.setHeader("Content-Disposition", "filename=" + fileName);
String realpath = this.getRealpath(urlInv + "/" + fileName);
/**
* 通过copyFile直接将文件读取后写出,在页面打开
*/
try {
this.loadFile(new BufferedInputStream(new FileInputStream(realpath)), new BufferedOutputStream(resp.getOutputStream()));
// FileUtils.copyFile(new File(realpath), resp.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Content-Disposition中指定的类型是文件的扩展名,并且弹出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content-Type中设置的为准。
注:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。
字段介绍如下:
disposition := "Content-Disposition" ":"
disposition-type
*(";" disposition-parm)
disposition-type := "inline"
/ "attachment"
/ extension-token
; values are not case-sensitive
disposition-parm := filename-parm / parameter
filename-parm := "filename" "=" value;
Content-Disposition属性有两种类型:inline 和 attachment inline :将文件内容直接显示在页面 attachment:弹出对话框让用户下载具体例子:
Content-Type: image/jpeg
Content-Disposition: inline;filename=hello.jpg
Content-Description: just a small picture of me
在页面内打开代码:
File file = new File("rfc1806.txt");
String filename = file.getName();
response.setHeader("Content-Type","text/plain");
response.addHeader("Content-Disposition","inline;filename=" + new String(filename.getBytes(),"utf-8"));
response.addHeader("Content-Length","" + file.length());
弹出保存框代码:
File file = new File("rfc1806.txt");
String filename = file.getName();
response.setHeader("Content-Type","text/plain");
response.addHeader("Content-Disposition","attachment;filename=" + new String(filename.getBytes(),"utf-8"));
response.addHeader("Content-Length","" + file.length());