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学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
深入for,while,foreach遍历时间比较的详解
Jun 08 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
ThinkPHP3.1数据CURD操作快速入门
Jun 19 PHP
PHP代码优化技巧小结
Sep 29 PHP
PHP+JS实现的商品秒杀倒计时用法示例
Nov 15 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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
ThinkPHP安装和设置
2015/07/27 PHP
php开发工具有哪五款
2015/11/09 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
一个超级简单的python web程序
2014/09/11 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
实习单位接收函
2014/01/11 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
PHP中->和=>的意思
2021/03/31 PHP
jquery插件实现搜索历史
2021/04/24 jQuery
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python