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