文件下载功能是web常用的功能,通常为了安全方面考虑,不会采用直接访问文件真实地址的方式去下载文件,而是通过读取文件数据流的方式进行下载。
- 封装File类,实现下载功能。File.php内容如下
<?php
class File
{
/**
* 下载文件
* @param $path string 下载文件的物理路径
* @return 文件流
*/
public static function Download($path , $filename = '')
{
header("Content-type:text/html;charset=utf-8");
//用以解决中文不能显示出来的问题
// $file_name=iconv("utf-8","gb2312",$file_name);
$pathinfo = pathinfo($path);
$file_name = empty($filename) ? $pathinfo['basename'] : $filename;
//判断给定的文件存在与否
if(!file_exists($path))
{
throw new Exception('页面走丢了',404);
}
$fp=fopen($path,"r");
$file_size=filesize($path);
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".$file_name);
$buffer=2048;
$file_count=0;
//向浏览器返回数据
while(!feof($fp) && $file_count<$file_size){
$file_con=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_con;
}
fclose($fp);
}
}
2.直接在Controller层调用
$filename = "下载的文件.xls";
$path = "/home/1.xls";
File::Download($path,$filename);