1. 程式人生 > >thinkphp支援mongodb的GridFS

thinkphp支援mongodb的GridFS

前言

Thinkphp本身是沒有對mongodb的Gridfs進行封裝支援的,所以在專案一些需要遇到以GridFS儲存檔案,例如圖片,視訊,文件檔案之類時,卻不能很好滿足。如果要使用,又得同時連線連線Mongo資料庫,對於在config.php裡配置的資料庫卻顯得有些大材小用。下面是對Tp框架的db類的一些修改,讓TP可以支援Mongodb的Gridfs。

方法

(1)修改Tp框架的Think/Db/Driver/Mongo.class.php類。在檔案中新增函式

/**
    *mongo的GridFS的獲取物件
    ** @param object GridFS
    */

    public function getGridFS(){
        return $this->_mongo->getGridFS();
    }

(2)修改Think/Model/MongoModel.class.php.在檔案中新增函式
/**
    *mongo的GridFS的獲取物件
    ** @param object GridFS
    */

    public function getGridFS(){
        return $this->db->getGridFS();
    }
儲存好這兩個檔案。

在控制器中的用法

<?php
namespace Home\Controller;
use Think\Controller;
class GridfsController extends Controller{
	public function index(){
		//獲取資料庫的物件
		$mongo=new \Think\Model\MongoModel;
		// 獲取GridFS的物件
		$G=$mongo->getGridFS();
		/**
		*GridFS操作的方法在tp中並沒有封裝,所以只能用原生的php_mongo的類的方法進行資料操作
		*/
		// 插入的引數資料
		$metadata=array('uid'=>123456,"metadata" =>array("author" =>'bing'));
		// 儲存檔案,返回id
		$id=$G->storeFile($_SERVER['DOCUMENT_ROOT'].'/huang.txt',$metadata);

		$cour=$G->find();
		foreach ($cour as $obj) {
			echo 'filename:'.$obj->getFilename();
		}	
	}
}
?>