function downloadFile($response, $file_name, $root) {
$response->setHeader('Content-type', 'text/html;charset=utf-8');
//用以解决中文不能显示出来的问题
$file_name=iconv("utf-8","gb2312",$file_name);
$file_path=$root.'/'.$file_name;
//首先要判断给定的文件存在与否
if(!file_exists($file_path)){
echo "没有该文件文件";
return ;
}
$fp=fopen($file_path,"r");
$file_size=filesize($file_path);
$response->setHeader("Content-type" ,"application/octet-stream");
$response->setHeader("Accept-Ranges", "bytes");
$response->setHeader("Accept-Length", $file_size);
$response->setHeader("Content-Disposition", "attachment; filename=".$file_name);
$buffer=1024;
$file_count=0;
//向浏览器返回数据
while(!feof($fp) && $file_count<$file_size){
$file_con=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_con;
}
fclose($fp);
}
controller 中使用方式:
function downloadAction() {
downloadFile( this−>response, file, $root);//文件名,文件路径 绝对路径
}
html 使用:
<a href="/server_name/Controller/download?file=demo.txt">a>