Yii2:避免文件路径暴漏,代理访问文件
制作背景:公司要做第三方文件管理系统,客户有时候需要直接访问文件,但是我们又不想暴露文件路径,才有这代理访问
基本功能介绍:读取txt文档、读取图片,如果有需要,可以通过插件读取doc、pdf文档,
http://www.yii2.com/uploads/temp/read.bmp是我的真实路径
控制器
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2016/11/24 0024
* Time: 14:38
*/ namespace app\controllers; use yii\web\Controller;
use app\models\FetchFiles; class FetchFilesController extends Controller
{
public $file_path = 'http://www.yii2.com/uploads/temp/read.bmp';
public function actionReadFile(){
$file_path = $this->file_path;
// echo $file_path;
//die;
$FetchFiles = new FetchFiles();
$FetchFiles->actionReadFile($file_path); } }
模型代码
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2016/11/24 0024
* Time: 16:53
*/ namespace app\models; use yii\base\Model; class FetchFiles extends Model
{ /**
*转换路径为虚拟路径,返回给客户
*/
public function actionVirtualFile(){
//virtualfile需要改为控制器名字,每次访问转换调用控制器去访问
$file_path = $this->file_path;
$file_path = str_replace('uploads/temp','virtualfile',$file_path);
echo($file_path);
} //客户访问资源时候,转换真实路径
public function actionReadFile($file_path){ //获取真实资源路径
$file_path = str_replace('virtualfile','uploads/temp',$file_path);
// Header("Location: $file_path");
//die();
//判断文件;类型
$fileType = substr(strrchr($file_path, '.'), );
//统一转换为小写
$fileType = strtolower($fileType);
//选择文件类型,根据文件类型调用不同方法读取文件
switch($fileType){
case 'png':
$this->actionReadImg($file_path,$fileType);
break;
case 'jpg':
$this->actionReadImg($file_path,$fileType);
break;
case 'jpeg':
$this->actionReadImg($file_path,$fileType);
break;
break;
case 'bmp':
$this->actionReadImg($file_path,$fileType);
break; case 'txt':
$this->actionReadTxt($file_path);
break; default:
echo $fileType. "文件类型不支持查看,请直接下载!";
}
// echo $fileType;
// echo file_get_contents("$file_path"); } //读取txt文档的方法
public function actionReadTxt($file_path){
//echo '使用访问文件的方法'.$file_path;
// $content = file_get_contents($file_path);
$handle = fopen("$file_path", 'r');
$content = '';
while(false != ($a = fread($handle, ))){//返回false表示已经读取到文件末尾
$content .= $a;
}
fclose($handle);
//转码,确保文档是utf-8;
$content = iconv('GB2312', 'UTF-8', $content);
echo $content;
} //读取图片的方法
public function actionReadImg($file_path,$fileType){ $contents=file_get_contents($file_path);
//设置图片的头文件
$header = 'Content-Type: image/'.$fileType;
header( "$header" );//访问图片
base64_decode($contents);
echo $contents;
} }
效果展示:
读取bmp后缀的图片
读取txt文档
Yii2:避免文件路径暴漏,代理访问文件的更多相关文章
- Android根据文件路径使用File类获取文件相关信息
Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...
- 获取DLL的文件路径以及调用DLL的文件路径
如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize) ...
- android--------根据文件路径使用File类获取文件相关信息
Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等. 如图: public class MainActivity extends Act ...
- Maven获取resources的文件路径、读取resources的文件
路径问题一切要看编译后的文件路径 比如,源文件路径是: 而编译后的文件路径为: 也就是说,resources文件夹下的文件在编译后,都是为根目录,这种情况下,比如我要读取resources 文件夹下的 ...
- MacOS查看NGINX文件路径(配置文件、日志文件)
使用 MacOS 经常发现 NGINX 路径不好找,后来发现一个很好的命令来查找: nginx -V 即可输出 NGINX 各文件夹的路径.
- 【php】 php获取文件路径中的文件名和文件后缀方法
获取文件名 $file = realpath(__DIR__.'/images/common/../addBtn.png'); 方法一 $file = realpath(__DIR__.'/image ...
- 把一个文件中所有文件名或者文件路径读取到一个txt文件,然后在matlab中读取
链接: http://blog.csdn.net/dreamgchuan/article/details/51113295 dir /on/b/s 这个读取的是这样的格式:
- [k8s]如何处理dockerfile无expose情况下在k8s里暴漏访问
做镜像时候忘记expose端口了, 或者要做一个通用的镜像, expose端口不固定, 又要在k8s环境里跑并暴漏服务访问,怎么破? 实际上: yaml的 ports: - containerPort ...
- 关于WEB-INF目录不提供外部访问及JSP引用 js,css 文件路径问题
在 web 项目开发过程中,我们常常使用到 JSP,以及对静态资源,js,css 等引用,但是我们应该把这些资源文件放在哪个目录下面咧,怎么引用. 当然如果是前后端分离的项目倒不用考虑这些. WEB- ...
随机推荐
- Express4 启航指南
确实有感而发,Nodejs真的发展太快了,这么说的原因有两点:自己去年冬天买了本<了不起的Node.js>,里面介绍Express的版本还是2.x.x:前些天小伙伴买了本<Node. ...
- <nginx.conf> nginx用户权限
Nginx用户权限 在nginx.conf文件的第一行一般是设置用户的地方(编译安装nginx时的参数--user=<user>也是指定用户的地方),如 user www www; 如不指 ...
- jQuery 2.0.3 源码分析Sizzle引擎 - 解析原理
声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 先来回答博友的提问: 如何解析 div > p + div.aaron input[type="checkb ...
- ICSharpCode.SharpZipLib.dll 移植WP
由于众所周知的原因. ICSharpCode.SharpZipLib.dll在Unity移植WP的时候出现诸多API不兼容,解决方案是在在Github上面找ICSharpCode.SharpZipLi ...
- JAVA--继承
项目开发遇到一个问题,稀里糊涂给实现了,现在重点讨论一下这是个什么情况,大神们如果看到希望给点指点. 问题:子类与父类具有相同的属性和方法,将子类实例化为父类,调用对应属性的get.set方法,打印出 ...
- 爬虫技术 -- 进阶学习(十一)【补充】获取html中meta标签中的content的内容
上一篇网易新闻页面信息抓取 -- htmlagilitypack搭配scrapysharp中提及了很多如何快速抓取html中的文本的语句, 但是meta标签中的content内容的抓取,没有提及到! ...
- 实践 Neutron 前的两个准备工作 - 每天5分钟玩转 OpenStack(78)
上一节配置了 linux-bridge mechanism driver,本节再做两个准备工作: 1. 检视初始的网络状态.2. 了解 linux bridge 环境中的各种网络设备. 初始网络状态 ...
- JSON入门指南--服务端处理JSON
平时公司使用的ASP.NET MVC3来开发Web项目,其实在ASP.NET中已经原生的支持JSON.所以基本不需要引进Newtonsoft.Json.dll.下面看在MVC4中,后台生成JSON数据 ...
- SPRING多个占位符配置文件解析源码研究--转
原文地址:http://www.cnphp6.com/archives/85639 Spring配置文件: <context:property-placeholder location=&quo ...
- 相克军_Oracle体系_随堂笔记012-undo
undo表空间中undo段是自动生成的,oracle自动使用undo表空间的undo段. 作为高级DBA,需要了解Oracle是如何使用undo段的.这样出了性能问题才能够解决. 1.Undo表空 ...