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编写大型网站问题集
Mar 06 PHP
php Undefined index和Undefined variable的解决方法
Mar 27 PHP
Smarty安装配置方法
Apr 10 PHP
PHP-MySQL教程归纳总结
Jun 07 PHP
PHP校验ISBN码的函数代码
Jan 17 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
Jul 04 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
php遍历删除整个目录及文件的方法
Mar 13 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
浅谈PHP匿名函数和闭包
Mar 08 PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 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 使用post,get的一种简洁方式
2010/04/25 PHP
Admin generator, filters and I18n
2011/10/06 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
python中常用的数据结构介绍
2021/01/12 Python
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
金融专业个人的自我评价
2013/10/18 职场文书
美术师范毕业生自荐信
2013/11/16 职场文书
会计专业个人求职信范文
2014/01/08 职场文书
军训教官感言
2014/03/02 职场文书
补充协议书
2015/01/28 职场文书
门店店长岗位职责
2015/04/14 职场文书
培训后的感想
2015/08/07 职场文书
Golang并发工具Singleflight
2022/05/06 Golang