第088讲 http协议深度剖析⑤-http响应详解(作业讲评)

列表样式下载图片:
image
样例代码:
fileDownList.php //界面列表

<?php
    header("Content-Type:text/html;charset='utf-8'");
?>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="./image/a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=乔彬.png">点击下载</a><img src="乔彬.png" width="70px"/><br/><br/>
中文形式的图片名称传递接收没问题。但是路径匹配不上,一直提示文件不存在不知道咋回事-目前不知道为啥 只能避免有中文图片存在

fileDownProcess.php//接收处理界面

<?php
    require "fileDownService.php";
    $file_name = $_REQUEST['filename'];
    //echo "接收的文件名".$file_name;
    downFile($file_name,"");
?>

fileDownService.php//下载方法

<?php
     //1、不封装
     function downFile($file_name,$file_sub_dir){
        //$file_name="b.png";
        //$file_name="乔彬.png"; 

        //如果是中文的。需要转码 php 这个古老的语言仅仅识别中文转换为gb2312
        //$file_name=iconv("UTF-8","GB2312",$file_name);//在google浏览器里边试了下,。php 5.4 下边 中文不会乱码---放开直接报错
        //$file_name=mb_convert_encoding($file_name,"UTF-8","gb2312");//这个也能转字符编码 但是 就当前这个来说并没有什么卵用
        //Notice: iconv(): Detected an illegal character in input string in D:\phpStudy\WWW\087_fileDown.php on line 6  //这个啥意思
        if(isset($file_sub_dir)){
            $file_path=$file_name;
        }else{
            $file_path=/**"./image/"*/$file_sub_dir.$file_name;
        }   
        $file_path=/**"./image/"*/$file_sub_dir.$file_name;
        //1、打开文件
        if(!file_exists($file_path)){
            echo "文件不存在  输出路径 ".$file_path;
            echo "<script type='text/javascript'>window.alert('文件不存在')</script>";
            return;
        }
        $fp=fopen($file_path,"r");

        //获取下载文件的大小
        $file_size=filesize($file_path);
        //echo "文件的大小是".$file_size;//这个也不能有

        //返回的文件
        header("Content-type:application/octet-stream");
        //按照字节返回
        header("Accept-Ranges:bytes");
        //返回这个文件大小
        header("Accept-Length:$file_size");
        //对应客户端弹出的对话框,对应的文件名
        header("Content-Disposition:attachment;filename=".$file_name);

        //向客户端回传数据

        $buffer = 1024;
        $file_count = 0;
        //用于判断数据读取
        while(!feof($fp) && $file_size-$file_count>0){
            $file_count+=$buffer;
            $file_data = fread($fp,$buffer);
            //把部分数据回送给浏览器
            //echo $file_count;//输出文件的时候不能有其他的echo 否则实际下载的写入的图片大小会和实际图片大小有出入
            echo $file_data;

        }
        fclose($fp);
    }
     //2、封装
?>

以上是下载代码未封装的

以下是封装的:
fileDownList.php

<?php
    header("Content-Type:text/html;charset='utf-8'");
?>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="./image/a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=a.png">点击下载</a><img src="a.png" width="70px"/><br/><br/>
<a href="fileDownProcess.php?filename=乔彬.png">点击下载</a><img src="乔彬.png" width="70px"/><br/><br/>
中文形式的图片名称传递接收没问题。但是路径匹配不上,一直提示文件不存在不知道咋回事-目前不知道为啥 只能避免有中文图片存在

fileDownProcess.php

<?php
    //require "fileDownService.php";
    include("fileDownService.php");//这个引入的是php文件名

    $file_name = $_REQUEST['filename'];
    //echo "接收的文件名".$file_name;
    //1 不封装调用
    //downFile($file_name,"");
    //2 封装调用
    $fileDownService = new fileDownService1($file_name,"");//引入php文件名之后 实例化内部的类对象
    $fileDownService->downFile();//然后调用类内部方法
?>

fileDownService.php//封装的类

<?php
     //1、不封装
     function downFile($file_name,$file_sub_dir){
        //$file_name="b.png";
        //$file_name="乔彬.png"; 

        //如果是中文的。需要转码 php 这个古老的语言仅仅识别中文转换为gb2312
        //$file_name=iconv("UTF-8","GB2312",$file_name);//在google浏览器里边试了下,。php 5.4 下边 中文不会乱码---放开直接报错
        //$file_name=mb_convert_encoding($file_name,"UTF-8","gb2312");//这个也能转字符编码 但是 就当前这个来说并没有什么卵用
        //Notice: iconv(): Detected an illegal character in input string in D:\phpStudy\WWW\087_fileDown.php on line 6  //这个啥意思
        if(isset($file_sub_dir)){
            $file_path=$file_name;
        }else{
            $file_path=/**"./image/"*/$file_sub_dir.$file_name;
        }   
        $file_path=/**"./image/"*/$file_sub_dir.$file_name;
        //1、打开文件
        if(!file_exists($file_path)){
            echo "文件不存在  输出路径 ".$file_path;
            echo "<script type='text/javascript'>window.alert('文件不存在')</script>";
            return;
        }
        $fp=fopen($file_path,"r");

        //获取下载文件的大小
        $file_size=filesize($file_path);
        //echo "文件的大小是".$file_size;//这个也不能有

        //返回的文件
        header("Content-type:application/octet-stream");
        //按照字节返回
        header("Accept-Ranges:bytes");
        //返回这个文件大小
        header("Accept-Length:$file_size");
        //对应客户端弹出的对话框,对应的文件名
        header("Content-Disposition:attachment;filename=".$file_name);

        //向客户端回传数据

        $buffer = 1024;
        $file_count = 0;
        //用于判断数据读取
        while(!feof($fp) && $file_size-$file_count>0){
            $file_count+=$buffer;
            $file_data = fread($fp,$buffer);
            //把部分数据回送给浏览器
            //echo $file_count;//输出文件的时候不能有其他的echo 否则实际下载的写入的图片大小会和实际图片大小有出入
            echo $file_data;

        }
        fclose($fp);
    }
     //2、封装

     class fileDownService{
        public $file_name;
        public $file_sub_dir;
        public function __construct($file_name,$file_sub_dir){
            $this->file_name = $file_name;
            $this->file_sub_dir = $file_sub_dir;
        }


        public function downFile(){
        //$file_name="b.png";
        //$file_name="乔彬.png"; 

        //如果是中文的。需要转码 php 这个古老的语言仅仅识别中文转换为gb2312
        //$file_name=iconv("UTF-8","GB2312",$file_name);//在google浏览器里边试了下,。php 5.4 下边 中文不会乱码---放开直接报错
        //$file_name=mb_convert_encoding($file_name,"UTF-8","gb2312");//这个也能转字符编码 但是 就当前这个来说并没有什么卵用
        //Notice: iconv(): Detected an illegal character in input string in D:\phpStudy\WWW\087_fileDown.php on line 6  //这个啥意思
        if(isset($this->file_sub_dir)){
            $file_path=$this->file_name;
        }else{
            $file_path=/**"./image/"*/$this->file_sub_dir.$this->file_name;
        }   
        //$file_path=/**"./image/"*/$file_sub_dir.$file_name;
        //1、打开文件
        if(!file_exists($file_path)){
            echo "文件不存在  输出路径 ".$file_path;
            echo "<script type='text/javascript'>window.alert('文件不存在')</script>";
            return;
        }
        $fp=fopen($file_path,"r");

        //获取下载文件的大小
        $file_size=filesize($file_path);
        //echo "文件的大小是".$file_size;//这个也不能有

        //返回的文件
        header("Content-type:application/octet-stream");
        //按照字节返回
        header("Accept-Ranges:bytes");
        //返回这个文件大小
        header("Accept-Length:$file_size");
        //对应客户端弹出的对话框,对应的文件名
        header("Content-Disposition:attachment;filename=".$this->file_name);

        //向客户端回传数据

        $buffer = 1024;
        $file_count = 0;
        //用于判断数据读取
        while(!feof($fp) && $file_size-$file_count>0){
            $file_count+=$buffer;
            $file_data = fread($fp,$buffer);
            //把部分数据回送给浏览器
            //echo $file_count;//输出文件的时候不能有其他的echo 否则实际下载的写入的图片大小会和实际图片大小有出入
            echo $file_data;

        }
        fclose($fp);
    }
     }
?>

猜你喜欢

转载自blog.csdn.net/u014449096/article/details/81215806
今日推荐