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 相关文章推荐
php数组的概述及分类与声明代码演示
Feb 26 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
thinkphp框架下404页面设置 仅三步
May 14 PHP
PHP对象实例化单例方法
Jan 19 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
PHP基于自增数据如何生成不重复的随机数示例
May 19 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 PHP
Yii框架页面渲染操作实例详解
Jul 19 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 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递归返回值时出现的问题解决办法
2013/02/19 PHP
php随机生成数字字母组合的方法
2015/03/18 PHP
php 问卷调查结果统计
2015/10/08 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
详解php中serialize()和unserialize()函数
2017/07/08 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
javascript一些实用技巧小结
2011/03/18 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
华为慧通笔试题
2016/04/22 面试题
"引用"与多态的关系
2013/02/01 面试题
什么是View State?
2013/01/27 面试题
大专计算机个人求职的自我评价
2013/10/21 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
打造完美自荐信
2014/01/24 职场文书
法院答辩状格式
2015/05/22 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA