1、http://cn2.php.net/manual/en/class.mongogridfs.php

class FileController extends SyController{

    /**@author yj
     * @description 要使用下面两个函数,必须先初始化
     * Date: 14-9-3
     */
    public function init(){
        header("Content-type:text/html;charset=utf-8");
        // 连接Mongo并初始化GFS
        // 数据库命名file
        $conn = new \MongoClient();
        $db = $conn->picDB;
        // 取得gridfs对象
        $prefix = 'pic';
        $collection = $db->getGridfs($prefix);
        return $collection;
    }

    /**@author yj
     * @description 将所有二进制文件上传入MongoDB,并返回文件索引ID值
     * 专用于表单提交资源方式
     * Date: 14-9-2
     * Time: 11:21
     */
    public function upload($filename,$collection)
    {
        $id = $collection->storeUpload($filename);
//        获取上一步的id对象中的_id字符串
        $id = strval($id);
        return $id;

    }
    /**@author yj
     * @description 根据ID值删除对应资源
     * Date: 14-9-3
     */
    public function delete($id,$collection)
    {
//        将id字符串转化成id对象
        $collection->delete(new \MongoId($id));
    }
    /**
     * @author:yj
     * 利用资源id和资源type把资源从mongoDB中获取并显示
     */
    public function get()
    {
        header("Content-type:text/html;charset=utf-8");
        $conn = new \MongoClient();
        $db = $conn->picDB;
//      取得gridfs对象
        $prefix = 'pic';
        $collection = $db->getGridFS($prefix);

        //获取id和type
        $id = I('get.id');
        $type = I('get.type');
        //返回数据
        $object = $collection->findOne(array('_id' => new \MongoId($id)));
        header('Content-type:'.$type);
        echo $object->getBytes();
    }

注意,存储在mongoDB里面的'_id'是一个对象ID,也叫Object ID。而我们存入mysql里面的ID是一个字符串ID。转换方法如下:

$id = strval($id);  //对象ID中获取字符串ID
'_id' => new \MongoId($id)  //将字符串ID转化成Mongo对象ID

2、在其他控制器里若想要使用MongoDB

//初始化MongoDB数据库
$collection = R('file/init');
//使用表单上传文件,$key是表单中input标签的name
$id = R('file/upload',array($key,$collection));
//根据字符串ID $avatar_id来删除Mongo里面的对应.files .chunks文件
$collection->delete(new \MongoId($avatar_id));
//根据字符串ID直接从Mongo里面获取资源并根据type显示出来
<img src="/file/get/type/image/id/{$avatar_id}"/>

 

posted on 2014-09-03 19:52  lanxian  阅读(367)  评论(0编辑  收藏  举报