1

请多时候你会发现浏览器即可显示图片(文件),也可提供图片(文件)下载。到底如何实现?什么代码控制的呢?

关键技术点

  • HTTP响应头属性
    1、Content-Type
    2、Content-Disposition (提供下载的实现)
    3、Content-Length

下载

  • 实现代码如下

    $file = './img/fang.jpg';
    $mode = 'rb';
    header('Content-Disposition:Attachment;filename='.basename($file));
    $finfo = new Finfo(FILEINFO_MIME_TYPE);
    $mime = $finfo->file($file);
    header('Content-Type: '.$mime);
    header('Content-Length:'.filesize($file));
    
    $handle = fopen($file, $mode);
    while(!feof($handle)){
        echo fgets($handle, 1024);
    }
  • 注意
    在IE中,没有header('Content-Disposition:Attachment;filename='.basename($file));这句代码也可实现下载,只要header('Content-Type:image/jpg');就会提供下载

显示

  • 实现代码如下

    $file = './img/fang.jpg';
    $mode = 'rb';
    $finfo = new Finfo(FILEINFO_MIME_TYPE);
    $mime = $finfo->file($file);
    header('Content-Type: '.$mime);
    header('Content-Length:'.filesize($file));
    
    $handle = fopen($file, $mode);
    while(!feof($handle)){
        echo fgets($handle, 1024);
    }
  • 注意
    在IE中,上面代码会没有效果(依然是下载),在IE中,要显示必须header('Content-Type: text/plain');不能设为image/jpg,这种做法不止兼容IE,其他浏览器也兼容。

  • 还有一种方法
    直接访问图片地址


104828720
1.4k 声望222 粉丝

编程其实很枯燥,所以一定要有追求。