/**
* 下载文件
* filename 不包括后缀名
*/
public function download($_path, $filename = '') {
if (file_exists($_path)) {
$fullPath = CHtml::decode($_path);
$filename = $filename ? $filename : substr(strrchr($fullPath, '/'), 1);
// Parse Info / Get Extension
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
$filename .= '.' . $ext;
// Determine Content Type
switch ($ext) {
case 'apk':
$ctype = 'application/vnd.android.package-archive';
break;
case 'chm':
$ctype = 'application/octet-stream';
break;
case "pdf":
$ctype = "application/pdf";
break;
case "txt":
$ctype = "application/txt";
break;
case "zip":
$ctype = "application/zip";
break;
case "doc":
$ctype = "application/msword";
break;
case "xls":
$ctype = "application/vnd.ms-excel";
break;
case "ppt":
$ctype = "application/vnd.ms-powerpoint";
break;
case "gif":
$ctype = "image/gif";
break;
case "png":
$ctype = "image/png";
break;
case "jpeg":
case "jpg":
$ctype = "image/jpg";
break;
default:
$ctype = "application/force-download";
}
$ua = $_SERVER["HTTP_USER_AGENT"];
$encoded_filename = rawurlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false); // required for certain browsers
header("Content-Type: $ctype");
// header('Content-Disposition: attachment; filename="'.rawurlencode($filename).'"');
if (preg_match("/MSIE/", $ua)) {
header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
header("Content-Disposition: attachment; filename*=utf8''" . $filename . '"');
} else {
header('Content-Disposition: attachment; filename="' . $filename . '"');
}
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $fsize);
ob_clean();
flush();
readfile($fullPath);
} else {
throw new Exception('文件不存在!', 1);
}
}