制作背景:公司要做第三方文件管理系统,客户有时候需要直接访问文件,但是我们又不想暴露文件路径,才有这代理访问

基本功能介绍:读取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:避免文件路径暴漏,代理访问文件的更多相关文章

  1. Android根据文件路径使用File类获取文件相关信息

    Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...

  2. 获取DLL的文件路径以及调用DLL的文件路径

    如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize) ...

  3. android--------根据文件路径使用File类获取文件相关信息

    Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等. 如图: public class MainActivity extends Act ...

  4. Maven获取resources的文件路径、读取resources的文件

    路径问题一切要看编译后的文件路径 比如,源文件路径是: 而编译后的文件路径为: 也就是说,resources文件夹下的文件在编译后,都是为根目录,这种情况下,比如我要读取resources 文件夹下的 ...

  5. MacOS查看NGINX文件路径(配置文件、日志文件)

    使用 MacOS 经常发现 NGINX 路径不好找,后来发现一个很好的命令来查找: nginx -V 即可输出 NGINX 各文件夹的路径.

  6. 【php】 php获取文件路径中的文件名和文件后缀方法

    获取文件名 $file = realpath(__DIR__.'/images/common/../addBtn.png'); 方法一 $file = realpath(__DIR__.'/image ...

  7. 把一个文件中所有文件名或者文件路径读取到一个txt文件,然后在matlab中读取

    链接: http://blog.csdn.net/dreamgchuan/article/details/51113295 dir /on/b/s  这个读取的是这样的格式:

  8. [k8s]如何处理dockerfile无expose情况下在k8s里暴漏访问

    做镜像时候忘记expose端口了, 或者要做一个通用的镜像, expose端口不固定, 又要在k8s环境里跑并暴漏服务访问,怎么破? 实际上: yaml的 ports: - containerPort ...

  9. 关于WEB-INF目录不提供外部访问及JSP引用 js,css 文件路径问题

    在 web 项目开发过程中,我们常常使用到 JSP,以及对静态资源,js,css 等引用,但是我们应该把这些资源文件放在哪个目录下面咧,怎么引用. 当然如果是前后端分离的项目倒不用考虑这些. WEB- ...

随机推荐

  1. Atitti  onvif 设备发现与原理

    Atitti  onvif 设备发现与原理 1.1. ,有以下几个步骤:1 1.2. 设备搜索原理及编程技巧:2 1.3. Ws disconvert 的组播地址和端口就是37022 1)发现ipca ...

  2. 初学者--bootstrap(三)下载与安装----在路上(7)

    ----------------------------------------对于学习与工作者来说用压缩版,若是研究框架则用源代码---------------------------------- ...

  3. c#设计模式-适配器模式

    一. 适配器(Adapter)模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. 名称由来 这很像变压器(Adapter),变压 ...

  4. 导入一些常用命令比如(rz),关闭防火墙外面可以访问

     yum -y install lrzsz-----------导入常用命令 我在虚拟机上面启动了一个项目 这个原因是防火墙造成的,关闭防火墙  iptables -L 查看下 service ipt ...

  5. SSISDB3:Environments 和 Environment Variables

    Environment 是ETL执行时使用的Parameters的集合,可以为一个Project引用不同的Environment variables,从而改变ETL执行的属性. 查看Environme ...

  6. 外接程序“VMDebugger”未能加载或者导致了异常。是否希望移除该外接程序?

    收工~

  7. SEO的Content里面的内容被转义的解决方法

    看图,不说话 转义的根源 收工 可能不全面,不过确实解决了这个问题,有更好的方法可以提一下,逆天感激不尽

  8. LoTVideo:只需两步,让HTML5原生态的Video茁壮成长

    开源地址:https://github.com/dunitian/LoTHTML5/tree/master/LoTVideo 第一步引入lotvideo.js(先确认在这个前面引入了jq包) 第二步: ...

  9. WPF 子窗体关闭,刷新父窗体

    父窗体代码 private void DGUserEdit() { if(DGUser.SelectedItem!=null) { DataRow dr = (DGUser.SelectedItem ...

  10. Python下使用help(dict),显示'more'不是内部或外部命令,也不是可运行的程序或批处理文件,该如何处理?

    1.首先需要用管理员身份运行cmd. 2.然后检查环境变量中path中是否添加C:\Windows\System32这个路径.