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 相关文章推荐
杏林同学录(九)
Oct 09 PHP
PHP版自动生成文章摘要
Jul 23 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
PHP 批量更新网页内容实现代码
Jan 05 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
基于PHP常用字符串的总结(待续)
Jun 07 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 PHP
PHP中array_map与array_column之间的关系分析
Aug 19 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 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实现批量查询清除一句话后门的代码
2008/01/20 PHP
php学习笔记之 函数声明
2011/06/09 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
ExtJs的Date格式字符代码
2010/12/30 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
Python decimal模块使用方法详解
2020/06/08 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
需求分析说明书
2014/05/09 职场文书
消防工作实施方案
2014/06/09 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
老人院义工活动感想
2015/08/07 职场文书
开学随笔
2015/08/15 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
Pytorch实现图像识别之数字识别(附详细注释)
2021/05/11 Python
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技