支持任意格式的文件下载 函数有两个参数,第一个参数是文件在服务器中完成路径,第二个参数是下载显示文件名称。
- /**
- * 下载文件
- * 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);
- }
- }
复制代码
|
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31