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防注入安全代码
Apr 09 PHP
php 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
Feb 27 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
PHP5.5迭代生成器用法实例详解
Mar 16 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
PHP图片添加水印功能示例小结
Oct 03 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 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 mkdir()定义和用法
2009/01/14 PHP
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
js转html实体的方法
2016/09/27 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
js实现车辆管理系统
2020/08/26 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
Python中对列表排序实例
2015/01/04 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Python import用法以及与from...import的区别
2015/05/28 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
什么是数据抽象
2016/11/26 面试题
运动会邀请函范文
2014/01/31 职场文书
颐和园导游词
2015/01/30 职场文书
财政局个人总结
2015/03/04 职场文书
商务司机岗位职责
2015/04/10 职场文书
厉行节约工作总结
2015/08/12 职场文书
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers