header中Content-Disposition的作用与使用方法


Posted in PHP onJune 13, 2012

Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-disposition其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,文件直接在浏览器上显示或者在访问时弹出文件下载对话框。

格式说明:
content-disposition = "Content-Disposition" ":" disposition-type *( ";" disposition-parm )  

字段说明:
Content-Disposition为属性名
disposition-type是以什么方式下载,如attachment为以附件方式下载
disposition-parm为默认保存时的文件名
服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等,会直接在浏览器中显示,如果需要提示用户保存,就要利用Content-Disposition进行一下处理,关键在于一定要加上attachment:

Response.AppendHeader("Content-Disposition","attachment;filename=FileName.txt");

备注:这样浏览器会提示保存还是打开,即使选择打开,也会使用相关联的程序比如记事本打开,而不是IE直接打开了。
Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名。具体的定义如下:
content-disposition = "Content-Disposition" ":" 
disposition-type *( ";" disposition-parm ) 
disposition-type = "attachment" | disp-extension-token 
disposition-parm = filename-parm | disp-extension-parm 
filename-parm = "filename" "=" quoted-string 
disp-extension-token = token 
disp-extension-parm = token "=" ( token | quoted-string )

那么由上可知具体的例子:

Content-Disposition: attachment; filename="filename.xls"
当然filename参数可以包含路径信息,但User-Agnet会忽略掉这些信息,只会把路径信息的最后一部分做为文件名。当你在响应类型为application/octet- stream情况下使用了这个头信息的话,那就意味着你不想直接显示内容,而是弹出一个"文件下载"的对话框,接下来就是由你来决定"打开"还是"保存" 了。

注意事项:

1.当代码里面使用Content-Disposition来确保浏览器弹出下载对话框的时候。 response.addHeader("Content-Disposition","attachment");一定要确保没有做过关于禁止浏览器缓存的操作。如下:

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

不然会发现下载功能在opera和firefox里面好好的没问题,在IE下面就是不行
PHP 相关文章推荐
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
php 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
php实现curl模拟ftp上传的方法
Jul 29 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
php实现三级级联下拉框
Apr 17 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
Mar 14 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
Jun 13 #PHP
Php中文件下载功能实现超详细流程分析
Jun 13 #PHP
php异常处理技术,顶级异常处理器
Jun 13 #PHP
PHP的异常处理类Exception的使用及说明
Jun 13 #PHP
PHP抽象类 介绍
Jun 13 #PHP
MySQL 日期时间函数常用总结
Jun 12 #PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 #PHP
You might like
php实现的mongodb操作类
2015/05/28 PHP
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
js实现无缝滚动图
2017/02/22 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
koa源码中promise的解读
2018/11/13 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
[01:54]胎教DOTA2 准妈妈玩家现身中国区预选赛
2016/06/26 DOTA
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
详解python中的文件与目录操作
2017/07/11 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
python实现QQ批量登录功能
2019/06/19 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
一些Solaris面试题
2015/12/22 面试题
大学校运会广播稿
2014/02/03 职场文书
记帐员岗位责任制
2014/02/08 职场文书
人事专员的职责
2014/02/26 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书