用PHP将图片以流的形式加载到image标签中

  很多情况下,如果为了网站资源案例考虑,我们就不能直接暴露资源的地址到页面中去,以防被人用工具去扫描盗用资源文件下的文件,在这里我们就可以考虑以前端页面请求后端程序,后端程序加以验证之后,以流的方式将资源输出,这样就会安全多了。


1、PHP代码(这里我是写在ThinkPHP5里面的,其它地方直接复制修改参数用)

    /*
     * 获取文件流
     * */
    public function getFileStream(){
        //接收前端传过来的ID
        $id = input('get.id');
        if(empty($id)){
            echo ''; 
            exit();
        }
        //在这里可以加入自己的逻辑与业务处理程序
        //********
        
        //从数据库取出资源地址
        $prizeObj = new prizeModel();
        $info = $prizeObj->get($id);
        $imgUrl = $info['thumb'];
        //资源文件目录
        $fpath = ROOT_PATH . 'public/';
        //编码转换
        $filename=iconv('utf-8', 'gb2312', $imgUrl);
        $path=$fpath.$filename;
        //检测文件是否存在
        if(!file_exists($path)){
            echo "文件不存在!";
            exit();
        }
        //只读方式打开
        $fp=fopen($path,'r');
        //文件大小
        $filesize=filesize($path);
        //设置文件类型
        header( "Content-type: image/jpeg");
        //预先清空缓冲区
        ob_clean();
        flush();
        //开始读取文件流
        $picturedata = fread($fp, $filesize);
        //读取完成 后关闭文件句柄,以防资源浪费 
        fclose($fp);
        //输出文件流
        echo $picturedata;
        exit();
    }


2、html中的image标签

<img src="/tphome/Index/getFileStream.html?id=1" alt="" />


3、最终的效果

blob.png

版权声明: 此文为本站源创文章[或由本站编辑从网络整理改编],
转载请备注出处:
[狂码一生] https://www.sindsun.com/articles/8/90
[若此文确切存在侵权,请联系本站管理员进行删除!]


--THE END--