下载文件总结

下载文件总结

生成 HTTP 头强制下载数据到客户端,这在实现文件下载时很有用。

首先感谢@yangweijie的作品,在此基础上衍生出不需要开启php_fileinfo.dll扩展的方法。

方法一:开启扩展情况下

  1. //$file 文件路径
  2. public function download_file($file){
  3.         if(is_file($file)){
  4.             $length = filesize($file);
  5.             $type = mime_content_type($file);
  6.             $showname =  ltrim(strrchr($file,’/’),’/’);
  7.             header(“Content-Description: File Transfer”);
  8.             header(‘Content-type: ‘ . $type);
  9.             header(‘Content-Length:’ . $length);
  10.             if (preg_match(‘/MSIE/’, $_SERVER[‘HTTP_USER_AGENT’])) {
     //for IE
  11.                 header(‘Content-Disposition: attachment; filename=”‘ . rawurlencode($showname) . ‘”‘);
  12.             } else {
  13.                 header(‘Content-Disposition: attachment; filename=”‘ . $showname . ‘”‘);
  14.             }
  15.             readfile($file);
  16.         } else {
  17.             $this->error(‘源文件不存在!’);
  18.         }
  19.     }
复制代码

方法二,如果没有开启php_fileinfo.dll,谁让咱是没有服务器权限的程序员呢,又不能让人家看不起,唉!可能你会懂。

  1. public function force_download($filename)
  2.     {
  3.         if ($filename == ”){
  4.             return FALSE;
  5.         }
  6.         if (FALSE === strpos($filename, ‘.’)){
  7.             return FALSE;
  8.         }
  9.         $x = explode(‘.’, $filename);
  10.         $extension = end($x);
  11.         $mimes =$this->getMimes();
  12.         // Set a default mime if we can’t find it
  13.         if ( ! isset($mimes[$extension])){
  14.             $mime = ‘application/octet-stream’;
  15.         }else{
  16.             $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
  17.         }
  18.         // Generate the server headers
  19.         if (strpos($_SERVER[‘HTTP_USER_AGENT’], “MSIE”) !== FALSE)
  20.         {
  21.             header(‘Content-Type: “‘.$mime.'”‘);
  22.             header(‘Content-Disposition: attachment; filename=”‘.$filename.'”‘);
  23.             header(‘Expires: 0’);
  24.             header(‘Cache-Control: must-revalidate, post-check=0, pre-check=0’);
  25.             header(“Content-Transfer-Encoding: binary”);
  26.             header(‘Pragma: public’);
  27.             header(“Content-Length: “.filesize($filename));
  28.         }
  29.         else
  30.         {
  31.             header(‘Content-Type: “‘.$mime.'”‘);
  32.             header(‘Content-Disposition: attachment; filename=”‘.$filename.'”‘);
  33.             header(“Content-Transfer-Encoding: binary”);
  34.             header(‘Expires: 0’);
  35.             header(‘Pragma: no-cache’);
  36.             header(“Content-Length: “.filesize($filename));
  37.         }
  38.         readfile($filename);
  39.     }
  40. private function getMimes(){
  41.         return $mimes = array(    ‘hqx’    =>    ‘application/mac-binhex40’,
  42.             ‘cpt’    =>    ‘application/mac-compactpro’,
  43.             ‘csv’    =>    array(‘text/x-comma-separated-values’, ‘text/comma-separated-values’, ‘application/octet-stream’, ‘application/vnd.ms-excel’, ‘application/x-csv’, ‘text/x-csv’, ‘text/csv’, ‘application/csv’, ‘application/excel’, ‘application/vnd.msexcel’),
  44.             ‘bin’    =>    ‘application/macbinary’,
  45.             ‘dms’    =>    ‘application/octet-stream’,
  46.             ‘lha’    =>    ‘application/octet-stream’,
  47.             ‘lzh’    =>    ‘application/octet-stream’,
  48.             ‘exe’    =>    array(‘application/octet-stream’, ‘application/x-msdownload’),
  49.             ‘class’    =>    ‘application/octet-stream’,
  50.             ‘psd’    =>    ‘application/x-photoshop’,
  51.             ‘so’    =>    ‘application/octet-stream’,
  52.             ‘sea’    =>    ‘application/octet-stream’,
  53.             ‘dll’    =>    ‘application/octet-stream’,
  54.             ‘oda’    =>    ‘application/oda’,
  55.             ‘pdf’    =>    array(‘application/pdf’, ‘application/x-download’),
  56.             ‘ai’    =>    ‘application/postscript’,
  57.             ‘eps’    =>    ‘application/postscript’,
  58.             ‘ps’    =>    ‘application/postscript’,
  59.             ‘smi’    =>    ‘application/smil’,
  60.             ‘smil’    =>    ‘application/smil’,
  61.             ‘mif’    =>    ‘application/vnd.mif’,
  62.             ‘xls’    =>    array(‘application/excel’, ‘application/vnd.ms-excel’, ‘application/msexcel’),
  63.             ‘ppt’    =>    array(‘application/powerpoint’, ‘application/vnd.ms-powerpoint’),
  64.             ‘wbxml’    =>    ‘application/wbxml’,
  65.             ‘wmlc’    =>    ‘application/wmlc’,
  66.             ‘dcr’    =>    ‘application/x-director’,
  67.             ‘dir’    =>    ‘application/x-director’,
  68.             ‘dxr’    =>    ‘application/x-director’,
  69.             ‘dvi’    =>    ‘application/x-dvi’,
  70.             ‘gtar’    =>    ‘application/x-gtar’,
  71.             ‘gz’    =>    ‘application/x-gzip’,
  72.             ‘php’    =>    ‘application/x-httpd-php’,
  73.             ‘php4’    =>    ‘application/x-httpd-php’,
  74.             ‘php3’    =>    ‘application/x-httpd-php’,
  75.             ‘phtml’    =>    ‘application/x-httpd-php’,
  76.             ‘phps’    =>    ‘application/x-httpd-php-source’,
  77.             ‘js’    =>    ‘application/x-javascript’,
  78.             ‘swf’    =>    ‘application/x-shockwave-flash’,
  79.             ‘sit’    =>    ‘application/x-stuffit’,
  80.             ‘tar’    =>    ‘application/x-tar’,
  81.             ‘tgz’    =>    array(‘application/x-tar’, ‘application/x-gzip-compressed’),
  82.             ‘xhtml’    =>    ‘application/xhtml+xml’,
  83.             ‘xht’    =>    ‘application/xhtml+xml’,
  84.             ‘zip’    =>  array(‘application/x-zip’, ‘application/zip’, ‘application/x-zip-compressed’),
  85.             ‘mid’    =>    ‘audio/midi’,
  86.             ‘midi’    =>    ‘audio/midi’,
  87.             ‘mpga’    =>    ”,
  88.             ‘mp2’    =>    ”,
  89.             ‘mp3’    =>    array(”, ‘audio/mpg’, ‘3’, ‘audio/mp3’),
  90.             ‘aif’    =>    ‘audio/x-aiff’,
  91.             ‘aiff’    =>    ‘audio/x-aiff’,
  92.             ‘aifc’    =>    ‘audio/x-aiff’,
  93.             ‘ram’    =>    ‘audio/x-pn-realaudio’,
  94.             ‘rm’    =>    ‘audio/x-pn-realaudio’,
  95.             ‘rpm’    =>    ‘audio/x-pn-realaudio-plugin’,
  96.             ‘ra’    =>    ‘audio/x-realaudio’,
  97.             ‘rv’    =>    ‘video/vnd.rn-realvideo’,
  98.             ‘wav’    =>    array(‘audio/x-wav’, ‘audio/wave’, ‘audio/wav’),
  99.             ‘bmp’    =>    array(‘image/bmp’, ‘image/x-windows-bmp’),
  100.             ‘gif’    =>    ‘image/gif’,
  101.             ‘jpeg’    =>    array(‘image/jpeg’, ‘image/pjpeg’),
  102.             ‘jpg’    =>    array(‘image/jpeg’, ‘image/pjpeg’),
  103.             ‘jpe’    =>    array(‘image/jpeg’, ‘image/pjpeg’),
  104.             ‘png’    =>    array(‘image/png’,  ‘image/x-png’),
  105.             ‘tiff’    =>    ‘image/tiff’,
  106.             ‘tif’    =>    ‘image/tiff’,
  107.             ‘css’    =>    ‘text/css’,
  108.             ‘html’    =>    ‘text/html’,
  109.             ‘htm’    =>    ‘text/html’,
  110.             ‘shtml’    =>    ‘text/html’,
  111.             ‘txt’    =>    ‘text/plain’,
  112.             ‘text’    =>    ‘text/plain’,
  113.             ‘log’    =>    array(‘text/plain’, ‘text/x-log’),
  114.             ‘rtx’    =>    ‘text/richtext’,
  115.             ‘rtf’    =>    ‘text/rtf’,
  116.             ‘xml’    =>    ‘text/xml’,
  117.             ‘xsl’    =>    ‘text/xml’,
  118.             ‘mpeg’    =>    ‘video/mpeg’,
  119.             ‘mpg’    =>    ‘video/mpeg’,
  120.             ‘mpe’    =>    ‘video/mpeg’,
  121.             ‘qt’    =>    ‘video/quicktime’,
  122.             ‘mov’    =>    ‘video/quicktime’,
  123.             ‘avi’    =>    ‘video/x-msvideo’,
  124.             ‘movie’    =>    ‘video/x-sgi-movie’,
  125.             ‘doc’    =>    ‘application/msword’,
  126.             ‘docx’    =>    array(‘application/vnd.openxmlformats-officedocument.wordprocessingml.document’, ‘application/zip’),
  127.             ‘xlsx’    =>    array(‘application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’, ‘application/zip’),
  128.             ‘word’    =>    array(‘application/msword’, ‘application/octet-stream’),
  129.             ‘xl’    =>    ‘application/excel’,
  130.             ’eml’    =>    ‘message/rfc822’,
  131.             ‘json’ => array(‘application/json’, ‘text/json’)
  132.         );
复制代码

看到这里估计大家都懂了,就是由后缀去匹配文件类型。实现mime_content_type的功能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114326.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何在pycharm运行python_pycharm怎么运行部分代码

    如何在pycharm运行python_pycharm怎么运行部分代码这篇文章主要介绍了Pycharm如何运行.py文件的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!Pycharm时一个非常好用的IDE,但是一开始的时候甚至会因为.py文件不能运行而束手无策。。。这里需要说明一下Pycharm的作用,Pycharm并不是一个像matlab那样什么都自己提供的软件,它更像一个非常棒的…

  • 2022.01idea激活码[最新免费获取]

    (2022.01idea激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • linux 查询内核版本_linux内核版本号的构成

    linux 查询内核版本_linux内核版本号的构成文章目录Linux内核(Linuxkernel)简介Linux内核版本号1、在CentOS下如:2、在Ubuntu下如:3、在ARMCortex-A7内核的嵌入式Linux开发板下内核版本分类查看Linux内核版本命令查看Linux系统版本的命令本文作者:Jasonhu本文链接:http://jasonhzy.github.io/2019/02/05/linux-kernel-version/Linux内核(Linuxkernel)简介 Linux内核版本命名在不同时期有着不同的规范

  • linux内核 5.0,Linux Kernel 5.0 正式发布,FreeSync支持[通俗易懂]

    linux内核 5.0,Linux Kernel 5.0 正式发布,FreeSync支持[通俗易懂]LinusTorvalds已经取得了进展,刚刚发布了Linux5.0稳定内核,最初是作为Linux4.21内核周期提供主线AMDRadeonFreeSync支持,持续开发英特尔Icelake和其他新CPU功能,罗技高分辨率滚动功能,网络改进等等。在今天的LinuxKernel5.0版本中,创建者LinusTorvalds评论道,“LinuxKernel5.0发布的最后一周并不完…

  • 光电编码器工作原理[通俗易懂]

    光电编码器工作原理[通俗易懂]光电编码器工作原理点击打开链接根据原理的不同又可分为:增量型、绝对型和混合式增量型。光电编码器的主要工作原理为光电转换,是一种通过光电转换将输出轴的机械几何位移量转换为脉冲或数字量的传感器。光电编码器主要由光栅盘和光电检测装置构成,在伺服系统中,光栅盘与电动机同轴致使电动机的旋转带动光栅盘的旋转,再经光电检测装置输出若干个脉冲信号,根据该信号的每秒脉冲数便可计算当前电动机的转速

  • django drf jwt_jwt验证原理

    django drf jwt_jwt验证原理前言带着问题学习是最有目的性的,我们先提出以下几个问题,看看通过这篇博客的讲解,能解决问题吗?什么是JWT?为什么要用JWT?它有什么优势?JWT的认证流程是怎样的?JWT的工作原理?我们

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号