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 相关文章推荐
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
php 破解防盗链图片函数
Dec 09 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
PHP获取ip对应地区和使用网络类型的方法
Mar 11 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
抛弃 PHP 代价太高
Apr 26 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
Aug 03 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
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
2016/12/19 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
详解Vue中的基本语法和常用指令
2019/07/23 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
师德师风自我评价范文
2014/09/11 职场文书
关于颐和园的导游词
2015/01/30 职场文书
三峡导游词
2015/01/31 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技