76. 文件下载
2015-12-19 16:43
288 查看
1. 通过 a 标签的 href 属性
1.1浏览器不支持的情况:
![](http://img.blog.csdn.net/20151219155143349)
![](http://img.blog.csdn.net/20151219155150515)
1.2浏览器支持的情况:直接下载
![](http://img.blog.csdn.net/20151219155502759)
![](http://img.blog.csdn.net/20151219155509167)
2. 通过程序下载
![](http://img.blog.csdn.net/20151219164219990)
没有basename()的话,
![](http://img.blog.csdn.net/20151219164341446)
如果不读文件的话,
![](http://img.blog.csdn.net/20151219161621442)
![](http://img.blog.csdn.net/20151220145322961)
![](http://img.blog.csdn.net/20151220145330670)
![](http://img.blog.csdn.net/20151220145419803)
/article/1303787.html
/article/4791401.html
/article/1266718.html
download.php <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <a href="1.rar">下载1.rar</a> </body> </html>
1.1浏览器不支持的情况:
1.2浏览器支持的情况:直接下载
2. 通过程序下载
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <a href="1.rar">下载1.rar</a><br/><br/><br/> <a href="1.png">下载1.png</a><br/><br/><br/> <a href="doDownLoad.php?filename=1.png">通过程序下载 1.png</a><br/><br/><br/> <a href="doDownLoad.php?filename=./upload/nv.jpg">下载nv.jpg</a> </body> </html>
<?php $file = $_GET['filename']; //告诉浏览器通过附件形式来处理文件,保存为名为filename的文件 header('content-disposition:attachment;filename=' . basename($file)); //告诉下载文件的大小 header('content-length:' . filesize($file)); readfile($file);//读取文件 /*if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; }*/
没有basename()的话,
如果不读文件的话,
<?php header('content-type:text/html;charset=utf-8'); $file = $_GET['filename']; var_dump($file); if(!file_exists($file)){ die('文件找不到'); }else{ $fp = fopen($file,'r'); header('content-type:application/octet-stream'); header('Accept-Ranges:bytes'); header('content-disposition:attachment;filename=' . basename($file)); header('content-length:' . filesize($file)); //readfile($file); //读取文件内容并直接输出到浏览器 echo fread($fp,filesize($file)); fclose($fp); exit; }
上述代码中,程序发送Header信息是用来告诉Apache和浏览器下载文件的相关信息的。 content-type的含义代表文件MIME类型是文件流格式。 如果在Apache配置里面把文件的MIME类型设为 application/octet-stream(如add application/octet-stream .xxx.rar), 那么浏览器(客户端)就会知道,这是一个文件流格式的文件并 提示用户下载。Accept-Ranges是一个响应头标, 它允许服务器指明将在给定的偏移和长度处,为资源组成部 分的接受请求,该头标的值被理解为请求范围的度量单位 。Content-Length是指定包含于请求或响应中数据的字节长度, 例如,Content-Length:382。Content-Disposition:attachment是用来告诉浏览器,文件是可以当做附件被下载, 下载后的文件名称为$file_name该变量的值。
代码: 2 <?php 3 header("Content-type:text/html;charset=utf-8"); 4 // $file_name="cookie.jpg"; 5 $file_name="圣诞狂欢.jpg"; 6 //用以解决中文不能显示出来的问题 7 $file_name=iconv("utf-8","gb2312",$file_name); 8 $file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy/down/down/"; 9 $file_path=$file_sub_path.$file_name; 10 //首先要判断给定的文件存在与否 11 if(!file_exists($file_path)){ 12 echo "没有该文件文件"; 13 return ; 14 } 15 $fp=fopen($file_path,"r"); 16 $file_size=filesize($file_path); 17 //下载文件需要用到的头 18 Header("Content-type: application/octet-stream"); 19 Header("Accept-Ranges: bytes"); 20 Header("Accept-Length:".$file_size); 21 Header("Content-Disposition: attachment; filename=".$file_name); 22 $buffer=1024; 23 $file_count=0; 24 //向浏览器返回数据 25 while(!feof($fp) && $file_count<$file_size){ 26 $file_con=fread($fp,$buffer); 27 $file_count+=$buffer; 28 echo $file_con; 29 } 30 fclose($fp); 31 ?>
/article/1303787.html
/article/4791401.html
/article/1266718.html
相关文章推荐
- 在Windows系统下怎么部署PHP网站运行环境?
- GDOI 12.19模拟赛总结
- opencv manager package was not found 解决办法
- 如何修改系统控件
- 苹果官方的图标大小的调整
- PHP smarty模板技术
- Caused by: java.lang.ClassNotFoundException: org.springframework.expression.PropertyAccessor
- [工具]图片等比例压缩工具
- JavaScript 代码小片段
- delete和delete[]
- Dubbo简单小例子(结合spring)
- 初识ACM——活泼的精灵
- 网页中给超链接添加"是否确认"的方法
- android-studio导入-so文件的方法
- Objectiv-C NSValue类的常用方法
- iOS 中 当程序进入后台 但是程序员希望在程序进入后台的时候还可以运行一段代码时候可以做以下的操作
- How to set up Automation Tools
- Naive Bayesian(朴素贝叶斯)
- Socket接收少一个字节问题(XP系统)
- 初识ACM——这是程序的世界