製作背景:公司要做第三方文件管理系統,客戶有時候需要直接訪問文件,但是我們又不想暴露文件路徑,才有這代理訪問 基本功能介紹:讀取txt文檔、讀取圖片,如果有需要,可以通過插件讀取doc、pdf文檔, 控制器 模型代碼 效果展示: 讀取bmp尾碼的圖片 讀取txt文檔 ...
製作背景:公司要做第三方文件管理系統,客戶有時候需要直接訪問文件,但是我們又不想暴露文件路徑,才有這代理訪問
基本功能介紹:讀取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, '.'), 1);
//統一轉換為小寫
$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, 8080))){//返回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文檔