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中=赋值操作符对不同数据类型的不同行为
Jan 02 PHP
PHP通用检测函数集合
Feb 08 PHP
php 随机排序广告的实现代码
May 09 PHP
PHP输入流php://input介绍
Sep 18 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
php使用Imagick生成图片的方法
Jul 31 PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
php中namespace及use用法分析
Dec 06 PHP
YII框架http缓存操作示例
Apr 29 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 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 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
微信小程序中的swiper组件详解
2017/04/14 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
Python+numpy实现矩阵的行列扩展方式
2019/11/29 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
python实现二分查找算法
2020/09/18 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
高中生的自我评价
2014/03/04 职场文书
参观邀请函范文
2015/02/02 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
小马王观后感
2015/06/11 职场文书
Windows server 2016服务器基本设置
2022/08/14 Servers